{
 "firmware": "sloopDX",
 "slug": "sloopdx",
 "author": "Sven Trogus (zvenson), based on SLOOP by isod89 and Felucca by Leo Kuroshita",
 "repo": "https://github.com/zvenson/dxsloop",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "4.0",
 "mapped_commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
 "release_date": "2026-10-16",
 "date_mapped": "2026-10-17",
 "status": "Independently checked: zero errors in round 4 (2026-10-17), after the round-1 to round-3 fixes. No device testing.",
 "turns_it_into": "A four-track groovebox with three DX7 synth parts, programmable FM drums and live performance layers.",
 "docs": [
  {
   "title": "README.md",
   "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md",
   "words": 8307,
   "read_at": "4.0 a439f1d; local pinned source and documentation read on 2026-10-17"
  },
  {
   "title": "SLOOP.md",
   "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/SLOOP.md",
   "words": 11199,
   "read_at": "4.0 a439f1d; local pinned source and documentation read on 2026-10-17"
  },
  {
   "title": "LICENSING.md",
   "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/LICENSING.md",
   "words": 691,
   "read_at": "4.0 a439f1d; local pinned source and documentation read on 2026-10-17"
  },
  {
   "title": "web/EDITOR_PROTOCOL.md",
   "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/web/EDITOR_PROTOCOL.md",
   "words": 5410,
   "read_at": "4.0 a439f1d; local pinned source and documentation read on 2026-10-17"
  }
 ],
 "install": {
  "official": "https://dx7.designburgapps.com/",
  "hub": "https://thefirmwarehub.com/"
 },
 "part_id_notes": "SEL is B_SCL in the source; panel calibration can change the electrical button/encoder assignments, while these ids follow the printed controls; button LEDs are under lights.button_*, and groups.key_lights lists the 27 key LEDs as lights.key_lights; the firmware drives one LED per button and does not separately address the second PLAY light.",
 "modes": [
  {
   "id": "synth_play",
   "name": "Playing a synth track",
   "how_to_get_there": "Choose track 1, 2 or 3 with ALGORITHM.",
   "what_it_is": "The keys play the selected DX7 part; scales, chord mode, OMNI and held layers can replace their ordinary note jobs.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1566-1679",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
    }
   ]
  },
  {
   "id": "chord_mode",
   "name": "Chord mode",
   "how_to_get_there": "On a synth track set SEL’s CHORD to a chord type.",
   "what_it_is": "White keys play scale chords and black keys are silent; there are no held black-key chord modifiers.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "185-224",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "234-267",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L267"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1646-1672",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
    }
   ]
  },
  {
   "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": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/drums.c",
     "lines": "62-79",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L79"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1627-1641",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
    }
   ]
  },
  {
   "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": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "335-349",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L335-L349"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "202-221",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L202-L221"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "267-283",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L267-L283"
    }
   ]
  },
  {
   "id": "pages",
   "name": "A button’s pages",
   "how_to_get_there": "Tap the page’s family button; tap it again for its next page.",
   "what_it_is": "Four values per page; SELECT stays tempo, while EDIT’s DX7 list has its own navigation.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "394-437",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L394-L437"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1107-1129",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1107-L1129"
    }
   ]
  },
  {
   "id": "step_page",
   "name": "SEQ STEP page (synth tracks)",
   "how_to_get_there": "Tap SEQ on a synth track to reopen its last page, then tap again as needed to reach STEP.",
   "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": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "433",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L433"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "587-629",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L587-L629"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "305-353",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L305-L353"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "274-290",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
    }
   ]
  },
  {
   "id": "save_pages",
   "name": "SAVE pages",
   "how_to_get_there": "Tap SAVE away from TRACKS, drum views, SONG and the DX7 list.",
   "what_it_is": "PRESETS, USER, SECTION and TOOLS; the DX7 list uses SAVE to store its bank instead.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "693-704",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L693-L704"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "427-430",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L427-L430"
    }
   ]
  },
  {
   "id": "save_presets",
   "name": "SAVE PRESETS",
   "how_to_get_there": "Tap SAVE until PRESETS appears.",
   "what_it_is": "Browse voices with KNOB 1; KNOB 2 reloads the first preset of the sole DX7 engine, and KNOB 4 adds or removes favourites.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "406-416",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L406-L416"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "575-606",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L575-L606"
    }
   ]
  },
  {
   "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; saving and erasing require stopped transport.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "428",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L428"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "418-436",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L418-L436"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/upreset.c",
     "lines": "343-373",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/upreset.c#L343-L373"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/upreset.c",
     "lines": "343-364",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/upreset.c#L343-L364"
    }
   ]
  },
  {
   "id": "save_project",
   "name": "SAVE > SECTION page",
   "how_to_get_there": "Tap SAVE again from USER.",
   "what_it_is": "The four song sections A-D: erase, load or save with two clicks, only while stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "429",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L429"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "437-449",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L437-L449"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "462-481",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L462-L481"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "581-599",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L581-L599"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "602-616",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L602-L616"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "651-664",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L651-L664"
    }
   ]
  },
  {
   "id": "save_tools",
   "name": "SAVE > TOOLS page",
   "how_to_get_there": "Tap SAVE again from SECTION.",
   "what_it_is": "Clear the pattern, reset the sound, or start a new working loop; sections A-D stay stored; each action needs two clicks.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "430",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L430"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "482-505",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L482-L505"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "355-386",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L355-L386"
    }
   ]
  },
  {
   "id": "drums_grid",
   "name": "DRUMS GRID",
   "how_to_get_there": "Choose drums and tap EDIT or SEQ on TRACKS; elsewhere tap EDIT as needed until its recalled or cycled page reaches DX7, which opens drum view, then use SEQ to switch KIT or LANE to GRID.",
   "what_it_is": "A drum grid edited with knobs; the keys continue to play drums here.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "473-486",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L473-L486"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "551-572",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L551-L572"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1627-1640",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "395-403",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L395-L403"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1044-1051",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1044-L1051"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1105-1106",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1105-L1106"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "658-683",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L658-L683"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "274-290",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "440-457",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L440-L457"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_draw.c",
     "lines": "675-681",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L675-L681"
    }
   ]
  },
  {
   "id": "drums_kit",
   "name": "DRUMS KIT",
   "how_to_get_there": "Tap SEQ or EDIT from GRID; EDIT from LANE also returns to KIT.",
   "what_it_is": "Choose one of five kits and set level, drive and compression; two SAVE taps write MY KIT.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "473-508",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L473-L508"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "619-624",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L619-L624"
    }
   ]
  },
  {
   "id": "song_screen",
   "name": "SONG screen",
   "how_to_get_there": "Tap SAVE on TRACKS or drum GRID, choose SEQ’s SONG page, or hold SAVE and press white key 16.",
   "what_it_is": "Up to sixteen song entries, each naming a section and its bar length.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "693-703",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L693-L703"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "352-354",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L352-L354"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_song.c",
     "lines": "18-85",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L18-L85"
    }
   ]
  },
  {
   "id": "stopped",
   "name": "Transport stopped",
   "how_to_get_there": "Press PLAY while playing.",
   "what_it_is": "The transport is stopped. Actions on SAVE > SECTION and user-sound save or erase require this state; the SECTION page refuses them during playback rather than queuing them. SAVE-layer section calls and stores still work while playing, and user sounds can load then too. Editing song-order entries needs a stop too; moving their cursor does not.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "581-599",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L581-L599"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "602-607",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L602-L607"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "651-656",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L651-L656"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/upreset.c",
     "lines": "356-371",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/upreset.c#L356-L371"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "301-332",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L301-L332"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_song.c",
     "lines": "135-150",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L135-L150"
    }
   ]
  },
  {
   "id": "playing",
   "name": "Transport playing",
   "how_to_get_there": "Press PLAY.",
   "what_it_is": "All four tracks loop.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1061-1070",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1061-L1070"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "2491-2510",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2491-L2510"
    }
   ]
  },
  {
   "id": "song_mode",
   "name": "Song mode",
   "how_to_get_there": "Hold SAVE and press white key 13 outside song recording, or press OCT- on the SONG screen while stopped.",
   "what_it_is": "PLAY plays the song order instead of the loop; recording waits until the song is stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "333-339",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L333-L339"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1916-1927",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1916-L1927"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_song.c",
     "lines": "104-112",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L104-L112"
    }
   ]
  },
  {
   "id": "rec_ready",
   "name": "REC armed",
   "how_to_get_there": "Press REC while stopped outside the SONG screen, where REC stores a section instead.",
   "what_it_is": "Choose free or tempo recording on an empty project, length and start method; QUANT has no handler and KNOB 4 can still edit the underlying page.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "850-881",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L850-L881"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1033-1051",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1033-L1051"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1111-1129",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1111-L1129"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "762-789",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L762-L789"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "892-893",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L892-L893"
    }
   ]
  },
  {
   "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": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "2498-2538",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2498-L2538"
    }
   ]
  },
  {
   "id": "free_take",
   "name": "Free take",
   "how_to_get_there": "Arm REC in an empty project with MODE free, then play.",
   "what_it_is": "Play without a click and close with REC to fit a quantised 1, 2 or 4 bar loop; PLAY cancels, and the take closes itself at its time limit.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "708-778",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L708-L778"
    }
   ]
  },
  {
   "id": "hold_clear",
   "name": "Clear-track ring",
   "how_to_get_there": "Hold REC beyond 0.7 seconds outside the SONG screen, where holding REC does not clear a track.",
   "what_it_is": "Continue until about two seconds total to clear notes or hits; drum locks remain, and releasing early cancels.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "883-933",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L883-L933"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "639-646",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L639-L646"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "892-893",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L892-L893"
    }
   ]
  },
  {
   "id": "layer_fx",
   "name": "FX punch-in layer",
   "how_to_get_there": "Hold FX.",
   "what_it_is": "All twenty-seven keys hold effects on the mix; knobs set master filter, DUST and DUCK, with KNOB 4 inactive.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "419-427",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L419-L427"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1573-1582",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1573-L1582"
    }
   ]
  },
  {
   "id": "layer_erase",
   "name": "EDIT erase layer",
   "how_to_get_there": "Hold EDIT.",
   "what_it_is": "Keys erase notes or drum hits, while knobs shift, resize or transpose the pattern; drum locks stay at their old positions and undo covers notes and length.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "51-104",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L51-L104"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1591-1623",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1623"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "226-250",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L226-L250"
    }
   ]
  },
  {
   "id": "layer_erase_mute",
   "name": "EDIT layer, drum mute mode",
   "how_to_get_there": "On the drum track, hold EDIT and press any black key.",
   "what_it_is": "White keys toggle live drum mutes without removing hits; any black key toggles between mute and erase. Releasing EDIT keeps that choice for the next hold. The mutes are not saved.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "782-792",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L782-L792"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1739-1745",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1739-L1745"
    }
   ]
  },
  {
   "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": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1291-1355",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1355"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "436-439",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L436-L439"
    }
   ]
  },
  {
   "id": "layer_steps",
   "name": "SEQ layer",
   "how_to_get_there": "Hold SEQ.",
   "what_it_is": "White keys edit 16 steps on the selected page; the first eight black keys choose pages when long enough, and OCT−/OCT+ cycle pages.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "106-167",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L106-L167"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "279-288",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L279-L288"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "837-846",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L837-L846"
    }
   ]
  },
  {
   "id": "layer_steps_held",
   "name": "SEQ with step keys held",
   "how_to_get_there": "Hold SEQ and one or more white step keys.",
   "what_it_is": "Edit pitches, velocity or hit level and ratchets; drums add one lane’s TUNE/DECAY lock per step, while synths have no general parameter locks or nudges.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "168-244",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L168-L244"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "401-465",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L401-L465"
    }
   ]
  },
  {
   "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": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "289-295",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "466-481",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L466-L481"
    }
   ]
  },
  {
   "id": "layer_mix",
   "name": "GLO mix layer",
   "how_to_get_there": "Hold GLO.",
   "what_it_is": "White keys 1–4 mute tracks, 5–8 solo them and 16 taps tempo; F#3 starts MIDI LEARN, and there are no fill or bar-jump keys.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "357-367",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
    }
   ]
  },
  {
   "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": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "296-356",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L356"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_layers.c",
     "lines": "373-388",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L373-L388"
    }
   ]
  },
  {
   "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": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "710-720",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L710-L720"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "739-748",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L739-L748"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "768-777",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L768-L777"
    }
   ]
  },
  {
   "id": "menu",
   "name": "HOME menu",
   "how_to_get_there": "Hold HOME for 0.7 s.",
   "what_it_is": "Four sections: SCREEN (colour or custom theme, zoom, knob acceleration), LIGHTS (button glow, key glow, played notes), AUDIO (speaker low cut, USB audio level, USB rate and USB SERIAL), SYSTEM (second core, hardware calibration, MIDI LEARN clear and version info).",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_menu.c",
     "lines": "9-22",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L9-L22"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_menu.c",
     "lines": "65-112",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L65-L112"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_menu.c",
     "lines": "244-328",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L244-L328"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/felucca.c",
     "lines": "40-42",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/felucca.c#L40-L42"
    }
   ]
  },
  {
   "id": "about",
   "name": "ABOUT",
   "how_to_get_there": "Hold HOME, select SYSTEM, select ABOUT with KNOB 4 and press OCT+.",
   "what_it_is": "Version, credits, processor status and FACTORY RESET; while stopped, press OCT+ then repeat before its warning clears to erase managed flash and reboot, but sections A–D survive in retained memory and are written again when quiet.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_menu.c",
     "lines": "143-174",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L143-L174"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_menu.c",
     "lines": "331-358",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L358"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "151",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L151"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "983-994",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L983-L994"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "1150-1164",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1150-L1164"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "1210-1214",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1210-L1214"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/main.c",
     "lines": "373-381",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L373-L381"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/app.ld",
     "lines": "35-37",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/app.ld#L35-L37"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/hal/fm1_sys.h",
     "lines": "134-141",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/hal/fm1_sys.h#L134-L141"
    }
   ]
  },
  {
   "id": "calibration",
   "name": "Hardware calibration",
   "how_to_get_there": "Switch on holding OCT- and OCT+, or menu SYSTEM, HARDWARE CALIBRATION, OCT+.",
   "what_it_is": "Teaches the firmware which physical button and knob is which: press each button and turn each knob right as named. 30 s with no input cancels and keeps the old table.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/main.c",
     "lines": "233-236",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L233-L236"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1133-1201",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1133-L1201"
    }
   ]
  },
  {
   "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": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/recovery.c",
     "lines": "41-70",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/recovery.c#L41-L70"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/bootguard.h",
     "lines": "17-30",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/bootguard.h#L17-L30"
    }
   ]
  },
  {
   "id": "update_countdown",
   "name": "Update-mode countdown",
   "how_to_get_there": "While stopped, hold OCT- and OCT+ together.",
   "what_it_is": "A countdown begins after 2 s and update mode starts after 5 s; it flushes pending sections, song/settings and the changed working loop, but unstored bank edits, MY KIT edits and favourites alone remain unsaved, and releasing either button cancels entry.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/main.c",
     "lines": "270-298",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L270-L298"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "1150-1178",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1150-L1178"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "782-806",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L782-L806"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "595-605",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L595-L605"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/main.c",
     "lines": "373-381",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L373-L381"
    }
   ]
  },
  {
   "id": "keyboard_hold",
   "name": "Keyboard hold",
   "how_to_get_there": "Set ARP MODE to OFF and ARP 2 HOLD to ON on a synth track.",
   "what_it_is": "Notes or chords keep sounding after their keys are released; with no keys physically held, the next press replaces them; switching HOLD off releases them.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "431-432",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L431-L432"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1142-1150",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1150"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1193-1204",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1204"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1223-1226",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1223-L1226"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "2627-2628",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2627-L2628"
    }
   ]
  },
  {
   "id": "drum_lane1",
   "name": "Drum LANE: tone",
   "how_to_get_there": "In drum KIT tap EDIT; turn PRESETS fully left.",
   "what_it_is": "The last-played drum lane’s TUNE, DECAY, SWEEP and BRIGHT offsets.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "480-486",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L480-L486"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "531-548",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L548"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "573-618",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L618"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/drums.c",
     "lines": "178-180",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L180"
    }
   ]
  },
  {
   "id": "drum_lane2",
   "name": "Drum LANE: mix",
   "how_to_get_there": "On drum LANE turn PRESETS to its second page.",
   "what_it_is": "Per-lane NOISE, LEVEL, PAN and CHOKE offsets.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "546-548",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L546-L548"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "573-618",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L618"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/drums.c",
     "lines": "178-180",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L180"
    }
   ]
  },
  {
   "id": "drum_lane3",
   "name": "Drum LANE: reverb and dice",
   "how_to_get_there": "On drum LANE turn PRESETS to its third page.",
   "what_it_is": "Per-lane reverb, an empty column and two confirmed dice actions.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "546-548",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L546-L548"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "573-618",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L618"
    }
   ]
  },
  {
   "id": "env",
   "name": "ENV",
   "how_to_get_there": "Tap ENV until this page appears.",
   "what_it_is": "KNOB 1–4: ATK, DEC, SUS, REL.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "395",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L395"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "219-231",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L219-L231"
    }
   ]
  },
  {
   "id": "env_dest",
   "name": "ENV DEST",
   "how_to_get_there": "Tap ENV until this page appears.",
   "what_it_is": "KNOB 1–4: ENV FILTER, ENV PITCH, ENV SHAPE, ESYNC.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "396",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L396"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "lfo",
   "name": "LFO",
   "how_to_get_there": "Tap LFO until this page appears.",
   "what_it_is": "KNOB 1–4: LFO RATE, LFO WAVE, LFO PHASE, LFO FADE.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "398",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L398"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "lfo2",
   "name": "LFO 2",
   "how_to_get_there": "Tap LFO until this page appears.",
   "what_it_is": "KNOB 1–4: LFO SYNC, LFO TRIG, LFO POL, -.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "399",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L399"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "lfo_dest",
   "name": "LFO DEST",
   "how_to_get_there": "Tap LFO until this page appears.",
   "what_it_is": "KNOB 1–4: LFO PITCH, LFO FILTER, LFO SHAPE, LFO AMP.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "400",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L400"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "fx_sends",
   "name": "SENDS",
   "how_to_get_there": "Tap FX until this page appears.",
   "what_it_is": "KNOB 1–4: DIST SEND, CHO SEND, DLY SEND, REV SEND.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "401",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L401"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "fx_dist",
   "name": "DIST",
   "how_to_get_there": "Tap FX until this page appears.",
   "what_it_is": "KNOB 1–4: DIST DRIVE, DIST TONE, DIST TYPE, DIST MIX.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "402",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L402"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "fx_chorus",
   "name": "CHORUS",
   "how_to_get_there": "Tap FX until this page appears.",
   "what_it_is": "KNOB 1–4: CHO SEND, CHO RATE, CHO DEPTH, CHO MIX.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "403",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L403"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "fx_delay",
   "name": "DELAY",
   "how_to_get_there": "Tap FX until this page appears.",
   "what_it_is": "KNOB 1–4: DLY SEND, DLY TIME, DLY FEEDBACK, DLY MIX.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "404",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L404"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "fx_reverb",
   "name": "REVERB",
   "how_to_get_there": "Tap FX until this page appears.",
   "what_it_is": "KNOB 1–4: REV SEND, REV SIZE, REV DAMP, REV PRE.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "fx_slicer",
   "name": "SLICER",
   "how_to_get_there": "Tap FX until this page appears.",
   "what_it_is": "KNOB 1–4: SLICE MODE, SLICE PAT, SLICE RATE, SLICE DEPTH.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "406",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L406"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "fx_insert",
   "name": "INSERT",
   "how_to_get_there": "Tap FX until this page appears.",
   "what_it_is": "KNOB 1–4: INSERT TYPE, INSERT A, INSERT B, INSERT C.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "407",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L407"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "203-217",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
    }
   ]
  },
  {
   "id": "fx_insert2",
   "name": "INSERT 2",
   "how_to_get_there": "Tap FX until this page appears.",
   "what_it_is": "KNOB 1–4: INSERT MIX, -, -, -.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "408",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L408"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "203-217",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
    }
   ]
  },
  {
   "id": "sel",
   "name": "SEL",
   "how_to_get_there": "Tap SEL until this page appears.",
   "what_it_is": "KNOB 1–4: ROOT, SCALE, KEYS, CHORD.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "409",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "sel2",
   "name": "SEL 2",
   "how_to_get_there": "Tap SEL until this page appears.",
   "what_it_is": "KNOB 1–4: TRANSPOSE, -, -, -.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "410",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L410"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "edit_quick",
   "name": "DX7 VOICE quick page",
   "how_to_get_there": "Tap EDIT > More Pages until this page appears.",
   "what_it_is": "KNOB 1–4: VOICE, BRITE, ATK, DEC.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "412",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L412"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "273-315",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "480-494",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
    }
   ]
  },
  {
   "id": "edit_shape",
   "name": "DX7 SHAPE quick page",
   "how_to_get_there": "Tap EDIT > More Pages until this page appears.",
   "what_it_is": "KNOB 1–4: REL, FDBK, CUT, RESO.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "413",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L413"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "273-315",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "480-494",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
    }
   ]
  },
  {
   "id": "voice",
   "name": "VOICE track page",
   "how_to_get_there": "Tap EDIT > More Pages until this page appears.",
   "what_it_is": "KNOB 1–4: VOICE MODE, GLIDE, GLIDE MODE, PRIORITY.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "414",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L414"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "voice2",
   "name": "VOICE 2 track page",
   "how_to_get_there": "Tap EDIT > More Pages until this page appears.",
   "what_it_is": "KNOB 1–4: ALLOC, DETUNE, PAN, MUTE.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "415",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L415"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "global",
   "name": "GLOBAL",
   "how_to_get_there": "Tap GLO until this page appears.",
   "what_it_is": "KNOB 1–4: BPM, SWING, CLICK, TUNE.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "416",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L416"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "master",
   "name": "MASTER",
   "how_to_get_there": "Tap GLO until this page appears.",
   "what_it_is": "KNOB 1–4: DUST, DUCK, MASTER FILT, ROLL RATE.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "417",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L417"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "system",
   "name": "SYSTEM",
   "how_to_get_there": "Tap GLO until this page appears.",
   "what_it_is": "KNOB 1–4: MIDI OUT, SYNC, MIDI IN, CPU.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "418",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L418"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "global_drums",
   "name": "DRUMS settings",
   "how_to_get_there": "Tap GLO until this page appears.",
   "what_it_is": "KNOB 1–4: DRUM CH, DRUM LEVEL, DRUM REVERB, DRUM DELAY.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "419",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L419"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "midi",
   "name": "MIDI",
   "how_to_get_there": "Tap GLO until this page appears.",
   "what_it_is": "KNOB 1–4: CH1, CH2, CH3, CH4.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "420",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L420"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "midi2",
   "name": "MIDI 2",
   "how_to_get_there": "Tap GLO until this page appears.",
   "what_it_is": "KNOB 1–4: MIDI IN, OTHER, MIDI OUT, BEND.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "421",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L421"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "midi3",
   "name": "MIDI 3",
   "how_to_get_there": "Tap GLO until this page appears.",
   "what_it_is": "KNOB 1–4: FX CH, DR MAP, REMOTE, CLOCK OUT.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "424",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L424"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "texture",
   "name": "TEXTURE",
   "how_to_get_there": "Tap GLO until this page appears.",
   "what_it_is": "KNOB 1–4: TEXTURE SRC, TEXTURE LVL, TEXTURE TONE, TEXTURE MOVE.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "425",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L425"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "texture2",
   "name": "TEXTURE 2",
   "how_to_get_there": "Tap GLO until this page appears.",
   "what_it_is": "KNOB 1–4: TEXTURE RATE, TEXTURE WHEN, TEXTURE DUCK, -.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "426",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L426"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "arp",
   "name": "ARP",
   "how_to_get_there": "Tap ARP until this page appears.",
   "what_it_is": "KNOB 1–4: ARP MODE, ARP RATE, ARP OCT, ARP GATE.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "431",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L431"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "arp2",
   "name": "ARP 2",
   "how_to_get_there": "Tap ARP until this page appears.",
   "what_it_is": "KNOB 1–4: ARP SWING, ARP PROB, ARP HOLD, ARP ORDER.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "432",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L432"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "pattern",
   "name": "PATTERN",
   "how_to_get_there": "Tap SEQ until this page appears.",
   "what_it_is": "KNOB 1–4: STEPS, DIV, TRACK SWING, GATE.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "434",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L434"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "389-405",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "450-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
    }
   ]
  },
  {
   "id": "omni",
   "name": "OMNI chord harp",
   "how_to_get_there": "On ARP choose OMNI for MODE, using a synth track.",
   "what_it_is": "Black keys choose and play chords; white keys play successive strings across the current chord, and either kind can record.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1395-1520",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1520"
    }
   ]
  },
  {
   "id": "follow",
   "name": "FLW pattern following",
   "how_to_get_there": "On another synth track’s ARP page, choose MODE FLW.",
   "what_it_is": "Its sequencer shifts toward the OMNI chord root by the nearest interval from five semitones down to six up; keys still play their ordinary notes.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1439-1443",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1439-L1443"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "2038-2047",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2038-L2047"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/core.h",
     "lines": "296-300",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/core.h#L296-L300"
    }
   ]
  },
  {
   "id": "dx_list",
   "name": "DX7 list: all levels",
   "how_to_get_there": "On a synth track tap EDIT to the DX7 list.",
   "what_it_is": "SELECT chooses rows, ALGORITHM edits them, PRESETS visits operators, and edits affect the bank in RAM until a bank write.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "25-116",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L25-L116"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "404-509",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L404-L509"
    }
   ]
  },
  {
   "id": "dx_top",
   "name": "DX7 top list",
   "how_to_get_there": "Tap EDIT to DX7, or HOME from a DX submenu.",
   "what_it_is": "Voice, Bank, Algorithm, Feedback, Osc Sync, Transpose, six operators, Pitch Env, LFO, Name, Copy To, Init Voice, Store and More Pages.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "34-50",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L34-L50"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "301-314",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L301-L314"
    }
   ]
  },
  {
   "id": "dx_op1",
   "name": "DX7 OP1",
   "how_to_get_there": "On the DX7 top list choose OP1 with SELECT and tap EDIT, or visit it with PRESETS.",
   "what_it_is": "Operator on/solo, output, tuning, envelope, velocity, amplitude modulation and key scaling.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "51-69",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "115-161",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "339-347",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L347"
    }
   ]
  },
  {
   "id": "dx_op2",
   "name": "DX7 OP2",
   "how_to_get_there": "On the DX7 top list choose OP2 with SELECT and tap EDIT, or visit it with PRESETS.",
   "what_it_is": "Operator on/solo, output, tuning, envelope, velocity, amplitude modulation and key scaling.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "51-69",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "115-161",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "339-347",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L347"
    }
   ]
  },
  {
   "id": "dx_op3",
   "name": "DX7 OP3",
   "how_to_get_there": "On the DX7 top list choose OP3 with SELECT and tap EDIT, or visit it with PRESETS.",
   "what_it_is": "Operator on/solo, output, tuning, envelope, velocity, amplitude modulation and key scaling.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "51-69",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "115-161",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "339-347",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L347"
    }
   ]
  },
  {
   "id": "dx_op4",
   "name": "DX7 OP4",
   "how_to_get_there": "On the DX7 top list choose OP4 with SELECT and tap EDIT, or visit it with PRESETS.",
   "what_it_is": "Operator on/solo, output, tuning, envelope, velocity, amplitude modulation and key scaling.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "51-69",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "115-161",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "339-347",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L347"
    }
   ]
  },
  {
   "id": "dx_op5",
   "name": "DX7 OP5",
   "how_to_get_there": "On the DX7 top list choose OP5 with SELECT and tap EDIT, or visit it with PRESETS.",
   "what_it_is": "Operator on/solo, output, tuning, envelope, velocity, amplitude modulation and key scaling.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "51-69",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "115-161",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "339-347",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L347"
    }
   ]
  },
  {
   "id": "dx_op6",
   "name": "DX7 OP6",
   "how_to_get_there": "On the DX7 top list choose OP6 with SELECT and tap EDIT, or visit it with PRESETS.",
   "what_it_is": "Operator on/solo, output, tuning, envelope, velocity, amplitude modulation and key scaling.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "51-69",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "115-161",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "339-347",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L347"
    }
   ]
  },
  {
   "id": "dx_pitch",
   "name": "DX7 Pitch Env",
   "how_to_get_there": "Choose this group on the DX7 top list and tap EDIT.",
   "what_it_is": "SELECT chooses a row and ALGORITHM changes its value in the bank in RAM.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "70-73",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L70-L73"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "339-355",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "462-473",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
    }
   ]
  },
  {
   "id": "dx_lfo",
   "name": "DX7 LFO",
   "how_to_get_there": "Choose this group on the DX7 top list and tap EDIT.",
   "what_it_is": "SELECT chooses a row and ALGORITHM changes its value in the bank in RAM.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "74-82",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L74-L82"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "339-355",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "462-473",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
    }
   ]
  },
  {
   "id": "dx_name",
   "name": "DX7 Name",
   "how_to_get_there": "Choose this group on the DX7 top list and tap EDIT.",
   "what_it_is": "SELECT chooses a row and ALGORITHM changes its value in the bank in RAM.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "83-88",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "339-355",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "462-473",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
    }
   ]
  },
  {
   "id": "dx_algorithm",
   "name": "DX7 algorithm diagram",
   "how_to_get_there": "Select Algorithm on the top list and turn ALGORITHM once.",
   "what_it_is": "First turn reveals the diagram; later turns change the algorithm, and SELECT returns to the list.",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "431-459",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L431-L459"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "623-659",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L623-L659"
    }
   ]
  }
 ],
 "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1061-1070",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1061-L1070"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1023-1025",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1023-L1025"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1062-1067",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1062-L1067"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1916-1927",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1916-L1927"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "2500-2510",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2500-L2510"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "2498-2499",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2498-L2499"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "762-778",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L762-L778"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "98-101",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1001",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1001"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "332-382",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L332-L382"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "120-139",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L120-L139"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "600-605",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L600-L605"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "128-138",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L128-L138"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "124-134",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L124-L134"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "press",
    "action": "Closes the free take into a quantised 1, 2 or 4 bar loop at the fitted tempo and starts playback.",
    "short_label": "CLOSE LOOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "708-753",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L708-L753"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "press",
    "action": "Cancels the count-in and disarms.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "128-133",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L128-L133"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "2521-2523",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2521-L2523"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Outside the SONG screen, hold about 2 seconds to clear the selected track’s notes or drum hits after a ring starts at 0.7 seconds; early release cancels, drum locks remain, and undo can restore notes and length within available step space.",
    "short_label": "CLEAR TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "883-933",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L883-L933"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "639-646",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L639-L646"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "226-250",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L226-L250"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "917-923",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L917-L923"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "892-893",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L892-L893"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "While stopped, writes the current loop into the song cursor’s section and saves the song order immediately; replacing a readable occupied section needs another REC within 3 seconds and has no section undo.",
    "short_label": "STORE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "104-132",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L104-L132"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "582-599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L582-L599"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Returns to TRACKS on release; on the DX7 list, HOME first returns from a submenu to its top list.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1053-1054",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1053-L1054"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "335-347",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L335-L347"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "301-314",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L301-L314"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Held 0.7 s: opens the menu.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "631-649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L631-L649"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-994",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L994"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "long_press",
    "action": "Held 0.7 s again: closes the menu and returns to TRACKS.",
    "short_label": "CLOSE MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-986",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L986"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "233-242",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L233-L242"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "768-777",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L768-L777"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "563-580",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L563-L580"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "768-777",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L768-L777"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "563-580",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L563-L580"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "768-777",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L768-L777"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "563-580",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L563-L580"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "768-777",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L768-L777"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "563-580",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L563-L580"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "768-777",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L768-L777"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "563-580",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L563-L580"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "768-777",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L768-L777"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "563-580",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L563-L580"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "768-777",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L768-L777"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "563-580",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L563-L580"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "739-748",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L739-L748"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1003-1007",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1003-L1007"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "Returns to TRACKS on release.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "301-314",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L301-L314"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "422-429",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L422-L429"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "press",
    "action": "Returns from a submenu to the top list at its group row, or leaves the top list for TRACKS.",
    "short_label": "DX BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "301-314",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L301-L314"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "422-429",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L422-L429"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1082-1084",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1082-L1084"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-290",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "395-396",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L395-L396"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Does nothing on the SONG screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "87-132",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L87-L132"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Opens the LFO pages (LFO, LFO 2, LFO DEST); again for the next page; LFO has no layer.",
    "short_label": "LFO PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1085-1087",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1085-L1087"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-290",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "398-400",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L398-L400"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Does nothing in the drum view.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "519-526",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L519-L526"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Does nothing on the SONG screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "87-132",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L87-L132"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "655-657",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L655-L657"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "26-27",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L26-L27"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-290",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "401-408",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L401-L408"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "734-812",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L734-L812"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "26-27",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L26-L27"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Leaves the held layer unless it is locked open; returning knobs are ignored for a quarter second.",
    "short_label": "LAYER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "722-730",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "774-796",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L774-L796"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "687-689",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L687-L689"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-290",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409-411",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409-L411"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the key and chord layer.",
    "short_label": "KEY/CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "734-812",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L734-L812"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "release",
    "action": "Leaves the held layer unless it is locked open; returning knobs are ignored for a quarter second.",
    "short_label": "LAYER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "722-730",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "774-796",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L774-L796"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "From another family’s ordinary page, EDIT recalls the last EDIT page, initially the DX7 list; on drums a recalled DX7 list opens drum view, while recalled quick pages show DRUM TRACK.",
    "short_label": "EDIT PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "658-683",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L658-L683"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "411-415",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L411-L415"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "380-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L380-L387"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "395-403",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L395-L403"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "658-683",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L658-L683"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-290",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "440-457",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L440-L457"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "675-681",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L675-L681"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "With drums selected on TRACKS, opens the last drum view used; tap SEQ to return from KIT or LANE to GRID.",
    "short_label": "DRUMS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "664-673",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L664-L673"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "9-14",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L9-L14"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "103-115",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L103-L115"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "474-478",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L474-L478"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Opens the drum KIT view.",
    "short_label": "KIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "480-486",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L480-L486"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Opens the last-played drum sound’s LANE controls.",
    "short_label": "LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "480-486",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L480-L486"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Clears the step under the cursor and moves to the next.",
    "short_label": "CLEAR STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "675-680",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L675-L680"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the erase layer.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "734-812",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L734-L812"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Returns to drum KIT.",
    "short_label": "KIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "480-486",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L480-L486"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Returns to drum KIT.",
    "short_label": "KIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "480-486",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L480-L486"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Returns to drum KIT.",
    "short_label": "KIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "480-486",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L480-L486"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "press",
    "action": "Does nothing inside a DX7 submenu or on a top-list scalar row.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-390",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L390"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On OP1 opens that group’s list.",
    "short_label": "OPEN OP1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On OP2 opens that group’s list.",
    "short_label": "OPEN OP2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On OP3 opens that group’s list.",
    "short_label": "OPEN OP3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On OP4 opens that group’s list.",
    "short_label": "OPEN OP4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On OP5 opens that group’s list.",
    "short_label": "OPEN OP5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On OP6 opens that group’s list.",
    "short_label": "OPEN OP6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On Pitch Env opens that group’s list.",
    "short_label": "PITCH ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On LFO opens that group’s list.",
    "short_label": "OPEN LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On Name opens that group’s list.",
    "short_label": "OPEN NAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "339-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L339-L355"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On Copy To, tap EDIT twice within 1.5 seconds to replace the chosen user slot in RAM with this voice and select it; STORE or SAVE writes the bank and there is no voice undo.",
    "short_label": "COPY VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "315-390",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L315-L390"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "782-795",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L782-L795"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On Init Voice, tap EDIT twice within 1.5 seconds to replace the current user slot in RAM with a blank voice, using an INIT VOICE slot first for a factory voice; STORE or SAVE writes it and there is no voice undo.",
    "short_label": "INIT VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "315-390",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L315-L390"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "782-795",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L782-L795"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On Store, tap EDIT twice within 1.5 seconds to write the active thirty-two-voice bank to flash; there is no bank undo.",
    "short_label": "STORE BANK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "315-390",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L315-L390"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "782-795",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L782-L795"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "press",
    "action": "On More Pages, tap EDIT to open the DX7 quick-control page and use further EDIT taps to cycle the ordinary EDIT pages.",
    "short_label": "MORE PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "315-390",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L315-L390"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "782-795",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L782-L795"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Leaves the held layer unless it is locked open; returning knobs are ignored for a quarter second.",
    "short_label": "LAYER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "722-730",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "774-796",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L774-L796"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "684-686",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L684-L686"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-290",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "431-432",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L431-L432"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the note-repeat layer (not the arpeggiator).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "734-812",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L734-L812"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1742-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1742-L1745"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Leaves the held layer unless it is locked open; returning knobs are ignored for a quarter second.",
    "short_label": "LAYER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "722-730",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "774-796",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L774-L796"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "658-683",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L658-L683"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-290",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "433-437",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L433-L437"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "With drums selected on TRACKS, opens the last drum view used; tap SEQ to return from KIT or LANE to GRID.",
    "short_label": "DRUMS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "664-673",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L664-L673"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "9-14",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L9-L14"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "103-115",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L103-L115"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "474-478",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L474-L478"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Opens the drum KIT view.",
    "short_label": "KIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "474-478",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L474-L478"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Returns to the drum GRID view.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "474-478",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L474-L478"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "682",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L682"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-290",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the step-entry layer.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "734-812",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L734-L812"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Returns to drum GRID.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "474-478",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L474-L478"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Returns to drum GRID.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "474-478",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L474-L478"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Returns to drum GRID.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "474-478",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L474-L478"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Leaves the held layer unless it is locked open; returning knobs are ignored for a quarter second.",
    "short_label": "LAYER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "722-730",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "774-796",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L774-L796"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Tapped: cycles GLOBAL, MASTER, SYSTEM, DRUMS, MIDI, MIDI 2, MIDI 3, TEXTURE and TEXTURE 2.",
    "short_label": "GLO PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "690-692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L690-L692"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-318",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L318"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "416-426",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L416-L426"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the mix layer.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "734-812",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L734-L812"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "release",
    "action": "Leaves the held layer unless it is locked open; returning knobs are ignored for a quarter second.",
    "short_label": "LAYER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "722-730",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L722-L730"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "774-796",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L774-L796"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "Opens the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "698-699",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L698-L699"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Opens the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "700-701",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L700-L701"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Tap twice within 2.5 seconds to replace MY KIT with the selected kit plus its lane edits, clear those lane offsets and write MY KIT immediately; a failed write leaves only the RAM copy and undo cannot restore the old kit.",
    "short_label": "STORE KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "488-508",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L488-L508"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "269-294",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L269-L294"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Writes the current song order into device settings immediately while stopped, without a further question or song-order undo; during playback it refuses.",
    "short_label": "SAVE SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "693-697",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L693-L697"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1119-1130",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1119-L1130"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "press",
    "action": "Opens the SAVE pages (PRESETS, USER, SECTION, TOOLS); tap again for the next page.",
    "short_label": "SAVE PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "693-704",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L693-L704"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "427-430",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L427-L430"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the song layer.",
    "short_label": "SONG LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "734-812",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L734-L812"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Tap twice within 2.5 seconds to replace MY KIT with the current kit and lane edits, clear the offsets and write flash immediately; RAM-only success does not survive power loss and there is no kit undo.",
    "short_label": "STORE KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "488-508",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L488-L508"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "269-294",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L269-L294"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Tap twice within 2.5 seconds to replace MY KIT with the current kit and lane edits, clear the offsets and write flash immediately; RAM-only success does not survive power loss and there is no kit undo.",
    "short_label": "STORE KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "488-508",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L488-L508"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "269-294",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L269-L294"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Tap twice within 2.5 seconds to replace MY KIT with the current kit and lane edits, clear the offsets and write flash immediately; RAM-only success does not survive power loss and there is no kit undo.",
    "short_label": "STORE KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "488-508",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L488-L508"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "269-294",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L269-L294"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "press",
    "action": "Writes the active bank’s thirty-two voices to flash immediately without a second question or undo; STORE ERROR means it was not saved.",
    "short_label": "STORE BANK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "693-695",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L693-L695"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "326-338",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L326-L338"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "782-795",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L782-L795"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "release",
    "action": "Two or more section calls during this hold become a looping chain when playback is running outside the song order.",
    "short_label": "CHAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-763",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L762-L763"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "373-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L373-L387"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "release",
    "action": "Leaves the song layer unless it is locked open; a pending chain is handled on release.",
    "short_label": "LAYER UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "762-763",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L762-L763"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "774-796",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L774-L796"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing as a short press while the menu is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "983-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L983-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L381"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1071-1081",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1071-L1081"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1076-1077",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1076-L1077"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "hold",
    "action": "While held, keys hit at ghost level.",
    "short_label": "GHOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1533-1538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1533-L1538"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1074-1075",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1074-L1075"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Every track's reverb send goes full while held (REV THROW); nothing is saved.",
    "short_label": "REV THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-823",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L813-L823"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Undoes one track’s notes or hits and pattern length within available step space; drum locks, lane macros and voice edits are outside this undo.",
    "short_label": "UNDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "824-835",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L824-L835"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "226-250",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L226-L250"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "328-339",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L328-L339"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-846",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L837-L846"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1533-1538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1533-L1538"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "104-112",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L104-L112"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Closes the menu; from ABOUT, back to the section.",
    "short_label": "CLOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "339-358",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L339-L358"
     }
    ]
   },
   {
    "mode": "stopped",
    "gesture": "press_with:button_oct_up",
    "action": "Held together for 5 s while stopped: a countdown starts after 2 s, then pending sections, song/settings and a changed working loop are written before update mode (UBOOT), while unstored DX7 bank edits, MY KIT edits and favourites alone remain unsaved; releasing either button cancels entry.",
    "short_label": "UPDATE 5s",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "270-298",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L270-L298"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1150-1178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1150-L1178"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "782-806",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L782-L806"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "595-605",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L595-L605"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "373-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L373-L381"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "action": "Cancels a pending reset and returns to the menu section.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "339-345",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L339-L345"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1071-1081",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1071-L1081"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1076-1077",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1076-L1077"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "hold",
    "action": "While held, keys hit at hard level.",
    "short_label": "HARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1533-1538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1533-L1538"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1074-1075",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1074-L1075"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Every track's delay send goes full while held (ECHO THROW); nothing is saved.",
    "short_label": "ECHO THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "813-823",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L813-L823"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Reapplies the note or hit and pattern-length change that undo restored, within available step space.",
    "short_label": "REDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "824-835",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L824-L835"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "226-250",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L226-L250"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "837-846",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L837-L846"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1533-1538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1533-L1538"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Pressed twice within 3 s (while stopped): loads the section of the entry under the cursor, replacing unsaved work.",
    "short_label": "LOAD X2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "113-122",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L113-L122"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Cycles the selected setting or opens calibration or ABOUT; on MIDI LEARN CLEAR it immediately deletes all learned CCs, without confirmation or undo, then saves when quiet; 2ND CORE OFF applies now, ON needs a power-on if the core is unavailable, and USB RATE needs a restart.",
    "short_label": "OK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "278-324",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L278-L324"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "790-798",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L790-L798"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "action": "While stopped, press OCT+ again before the ERASE ALL warning clears to erase the managed flash stores and reboot without undo; sections A–D survive in retained memory and are written again once the restarted unit is quiet.",
    "short_label": "RESET ALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "24-35",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L24-L35"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "347-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L347-L355"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/storage.c",
      "lines": "232-242",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/storage.c#L232-L242"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "151",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L151"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "983-994",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L983-L994"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1150-1164",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1150-L1164"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1210-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1210-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "373-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L373-L381"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/app.ld",
      "lines": "35-37",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/app.ld#L35-L37"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/hal/fm1_sys.h",
      "lines": "134-141",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/hal/fm1_sys.h#L134-L141"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "331-358",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L331-L358"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "168-174",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L168-L174"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/recovery.c",
      "lines": "41-70",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/recovery.c#L41-L70"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/bootguard.h",
      "lines": "27-30",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/bootguard.h#L27-L30"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "392-393",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L392-L393"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Starts hardware calibration: press each named button and turn each named knob right.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "233-236",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L233-L236"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1133-1201",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1133-L1201"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1107-1110",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1107-L1110"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "295-319",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L295-L319"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets the global tempo; change ordinary pages by tapping their button.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1107-1110",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1107-L1110"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "274-290",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "action": "Inside a layer: sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1016",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1012-L1016"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn",
    "action": "Inside a layer: sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1016",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1012-L1016"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "turn",
    "action": "Inside a layer: sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1016",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1012-L1016"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn",
    "action": "Inside a layer: sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1016",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1012-L1016"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn",
    "action": "Inside a layer: sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1016",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1012-L1016"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn",
    "action": "Inside a layer: sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1016",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1012-L1016"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn",
    "action": "Inside a layer: sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1016",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1012-L1016"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "turn",
    "action": "Inside a layer: sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1016",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1012-L1016"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "turn",
    "action": "Inside a layer: sets the tempo; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1012-1016",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1012-L1016"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "Sets the tempo the take records at; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1107-1110",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1107-L1110"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Sets the global tempo in the drum view.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "527-530",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L527-L530"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Sets the global tempo in the drum view.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "527-530",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L527-L530"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "363-371",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L363-L371"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "turn",
    "action": "Does nothing on the SONG screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "152-153",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L152-L153"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "turn",
    "action": "Sets global tempo.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "527-530",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L527-L530"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "turn",
    "action": "Sets global tempo.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "527-530",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L527-L530"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "turn",
    "action": "Sets global tempo.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "527-530",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L527-L530"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "turn",
    "action": "Chooses the current list’s row, stopping at its ends and cancelling a pending action or algorithm diagram.",
    "short_label": "DX ROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "431-438",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L431-L438"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Browses favourites, 20 factory presets, 32 voices from the selected bank and saved user presets; factory and user presets replace sound edits, while bank voices reset their quick controls and retain the track’s mix, sends and pattern; on drums, chooses the kit.",
    "short_label": "SOUND/KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1095-1103",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1095-L1103"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "517-551",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L517-L551"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "634-681",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L634-L681"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Browses favourites, 20 factory presets, 32 voices from the selected bank and saved user presets; factory and user presets replace sound edits, while bank voices reset their quick controls and retain the track’s mix, sends and pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1095-1103",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1095-L1103"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "634-681",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L634-L681"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1095-1098",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1095-L1098"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Picks the drum kit.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "546-551",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L546-L551"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Picks the drum kit.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "546-551",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L546-L551"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Moves the cursor round the section's rows.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "372-373",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L372-L373"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "turn",
    "action": "Moves among the three lane-control pages, stopping at either end.",
    "short_label": "LANE PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "546-550",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L546-L550"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "turn",
    "action": "Moves among the three lane-control pages, stopping at either end.",
    "short_label": "LANE PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "546-550",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L546-L550"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "turn",
    "action": "Moves among the three lane-control pages, stopping at either end.",
    "short_label": "LANE PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "546-550",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L546-L550"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "On held drum hits, changes DECAY for the selected sound, replacing another lane’s lock on the same step; synth steps ignore this turn.",
    "short_label": "DECAY LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "168-190",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L168-L190"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "401-412",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L401-L412"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "turn",
    "action": "Visits operators OP1–OP6, preserving the operator row; from another list right enters OP1 and left enters OP6.",
    "short_label": "OPERATOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "475-484",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L475-L484"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1095-1103",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1095-L1103"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1095-1103",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1095-L1103"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1095-1103",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1095-L1103"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Selects track 1–4 and moves the recording arm with it; the DX7 list edits its selected row instead, and the menu, SONG view, held layers and free takes ignore track turns.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1017-1018",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1017-L1018"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1040-1051",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1040-L1051"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1105-1106",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1105-L1106"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "739-750",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L739-L750"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "439-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L439-L473"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "539-545",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L539-L545"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "539-545",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L539-L545"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "turn",
    "action": "Changes track, returning to TRACKS when leaving drums; a free take keeps its track.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "539-544",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L539-L544"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "turn",
    "action": "Changes track, returning to TRACKS when leaving drums; a free take keeps its track.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "539-544",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L539-L544"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "turn",
    "action": "Changes track, returning to TRACKS when leaving drums; a free take keeps its track.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "539-544",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L539-L544"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "turn",
    "action": "On a parameter row edits the selected voice in RAM; a factory voice first uses an INIT VOICE slot, and a full bank refuses that edit until COPY TO chooses a destination.",
    "short_label": "DX VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "179-216",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L179-L216"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "turn",
    "action": "On Voice chooses 01–52, covering twenty factory voices and thirty-two active-bank slots.",
    "short_label": "DX VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "454-458",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L454-L458"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-490",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L490"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "turn",
    "action": "On Bank chooses bank 1–8 shared by all synth parts, silently attempts to save dirty departing-bank edits, then writes the new selection; a failed save can lose those edits.",
    "short_label": "DX BANK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "441-449",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L441-L449"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "750-795",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L750-L795"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "819-837",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L819-L837"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "turn",
    "action": "On Algorithm the first turn shows the diagram, then later turns select algorithm 1–32.",
    "short_label": "DX ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "34-40",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L34-L40"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "455-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L455-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "turn",
    "action": "On Feedback sets feedback from 0 to 7.",
    "short_label": "DX FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "34-40",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L34-L40"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "455-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L455-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "turn",
    "action": "On Osc Sync switches oscillator synchronisation OFF or ON.",
    "short_label": "DX OSC SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "34-40",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L34-L40"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "455-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L455-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "turn",
    "action": "On Transpose changes the voice’s pitch by up to 24 semitones each way.",
    "short_label": "DX TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "34-40",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L34-L40"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "455-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L455-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "turn",
    "action": "On Copy To chooses destination U01–U32 without copying yet.",
    "short_label": "COPY TARGET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "459-461",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L459-L461"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "turn",
    "action": "Does nothing on a group row, Init Voice, Store or More Pages.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "449-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L449-L473"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On On, toggles this operator’s temporary mute in either turn direction.",
    "short_label": "OP ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Solo, toggles a temporary solo and restores the previous mute switches when turned off.",
    "short_label": "OP SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Output Level, sets its output level from 0 to 99.",
    "short_label": "OP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Coarse, sets coarse frequency from 0 to 31, interpreted by RATIO or FIXED mode.",
    "short_label": "OP COARSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Fine, sets fine frequency from 0 to 99.",
    "short_label": "OP FINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Detune, sets detune from −7 to +7.",
    "short_label": "OP DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Osc Mode, chooses RATIO or FIXED frequency mode.",
    "short_label": "OP OSC MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Rate 1, sets envelope rate 1 from 0 to 99.",
    "short_label": "OP RATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Rate 2, sets envelope rate 2 from 0 to 99.",
    "short_label": "OP RATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Rate 3, sets envelope rate 3 from 0 to 99.",
    "short_label": "OP RATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Rate 4, sets envelope rate 4 from 0 to 99.",
    "short_label": "OP RATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Level 1, sets envelope level 1 from 0 to 99.",
    "short_label": "OP LEVEL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Level 2, sets envelope level 2 from 0 to 99.",
    "short_label": "OP LEVEL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Level 3, sets envelope level 3 from 0 to 99.",
    "short_label": "OP LEVEL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Level 4, sets envelope level 4 from 0 to 99.",
    "short_label": "OP LEVEL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Key Velocity, sets velocity sensitivity from 0 to 7.",
    "short_label": "OP VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Amp Mod Sens, sets amplitude-modulation sensitivity from 0 to 3.",
    "short_label": "OP AMP MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Break Point, chooses the keyboard-scaling breakpoint across 100 notes from A−1 to C8.",
    "short_label": "OP BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Left Depth, sets scaling depth below the breakpoint from 0 to 99.",
    "short_label": "OP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Right Depth, sets scaling depth above the breakpoint from 0 to 99.",
    "short_label": "OP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Left Curve, chooses −LIN, −EXP, +EXP or +LIN below the breakpoint.",
    "short_label": "OP L CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Right Curve, chooses −LIN, −EXP, +EXP or +LIN above the breakpoint.",
    "short_label": "OP R CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "turn",
    "action": "On Rate Scaling, sets envelope-rate keyboard scaling from 0 to 7.",
    "short_label": "RATE SCALING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On On, toggles this operator’s temporary mute in either turn direction.",
    "short_label": "OP ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Solo, toggles a temporary solo and restores the previous mute switches when turned off.",
    "short_label": "OP SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Output Level, sets its output level from 0 to 99.",
    "short_label": "OP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Coarse, sets coarse frequency from 0 to 31, interpreted by RATIO or FIXED mode.",
    "short_label": "OP COARSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Fine, sets fine frequency from 0 to 99.",
    "short_label": "OP FINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Detune, sets detune from −7 to +7.",
    "short_label": "OP DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Osc Mode, chooses RATIO or FIXED frequency mode.",
    "short_label": "OP OSC MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Rate 1, sets envelope rate 1 from 0 to 99.",
    "short_label": "OP RATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Rate 2, sets envelope rate 2 from 0 to 99.",
    "short_label": "OP RATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Rate 3, sets envelope rate 3 from 0 to 99.",
    "short_label": "OP RATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Rate 4, sets envelope rate 4 from 0 to 99.",
    "short_label": "OP RATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Level 1, sets envelope level 1 from 0 to 99.",
    "short_label": "OP LEVEL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Level 2, sets envelope level 2 from 0 to 99.",
    "short_label": "OP LEVEL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Level 3, sets envelope level 3 from 0 to 99.",
    "short_label": "OP LEVEL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Level 4, sets envelope level 4 from 0 to 99.",
    "short_label": "OP LEVEL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Key Velocity, sets velocity sensitivity from 0 to 7.",
    "short_label": "OP VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Amp Mod Sens, sets amplitude-modulation sensitivity from 0 to 3.",
    "short_label": "OP AMP MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Break Point, chooses the keyboard-scaling breakpoint across 100 notes from A−1 to C8.",
    "short_label": "OP BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Left Depth, sets scaling depth below the breakpoint from 0 to 99.",
    "short_label": "OP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Right Depth, sets scaling depth above the breakpoint from 0 to 99.",
    "short_label": "OP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Left Curve, chooses −LIN, −EXP, +EXP or +LIN below the breakpoint.",
    "short_label": "OP L CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Right Curve, chooses −LIN, −EXP, +EXP or +LIN above the breakpoint.",
    "short_label": "OP R CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "turn",
    "action": "On Rate Scaling, sets envelope-rate keyboard scaling from 0 to 7.",
    "short_label": "RATE SCALING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On On, toggles this operator’s temporary mute in either turn direction.",
    "short_label": "OP ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Solo, toggles a temporary solo and restores the previous mute switches when turned off.",
    "short_label": "OP SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Output Level, sets its output level from 0 to 99.",
    "short_label": "OP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Coarse, sets coarse frequency from 0 to 31, interpreted by RATIO or FIXED mode.",
    "short_label": "OP COARSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Fine, sets fine frequency from 0 to 99.",
    "short_label": "OP FINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Detune, sets detune from −7 to +7.",
    "short_label": "OP DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Osc Mode, chooses RATIO or FIXED frequency mode.",
    "short_label": "OP OSC MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Rate 1, sets envelope rate 1 from 0 to 99.",
    "short_label": "OP RATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Rate 2, sets envelope rate 2 from 0 to 99.",
    "short_label": "OP RATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Rate 3, sets envelope rate 3 from 0 to 99.",
    "short_label": "OP RATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Rate 4, sets envelope rate 4 from 0 to 99.",
    "short_label": "OP RATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Level 1, sets envelope level 1 from 0 to 99.",
    "short_label": "OP LEVEL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Level 2, sets envelope level 2 from 0 to 99.",
    "short_label": "OP LEVEL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Level 3, sets envelope level 3 from 0 to 99.",
    "short_label": "OP LEVEL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Level 4, sets envelope level 4 from 0 to 99.",
    "short_label": "OP LEVEL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Key Velocity, sets velocity sensitivity from 0 to 7.",
    "short_label": "OP VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Amp Mod Sens, sets amplitude-modulation sensitivity from 0 to 3.",
    "short_label": "OP AMP MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Break Point, chooses the keyboard-scaling breakpoint across 100 notes from A−1 to C8.",
    "short_label": "OP BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Left Depth, sets scaling depth below the breakpoint from 0 to 99.",
    "short_label": "OP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Right Depth, sets scaling depth above the breakpoint from 0 to 99.",
    "short_label": "OP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Left Curve, chooses −LIN, −EXP, +EXP or +LIN below the breakpoint.",
    "short_label": "OP L CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Right Curve, chooses −LIN, −EXP, +EXP or +LIN above the breakpoint.",
    "short_label": "OP R CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "turn",
    "action": "On Rate Scaling, sets envelope-rate keyboard scaling from 0 to 7.",
    "short_label": "RATE SCALING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On On, toggles this operator’s temporary mute in either turn direction.",
    "short_label": "OP ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Solo, toggles a temporary solo and restores the previous mute switches when turned off.",
    "short_label": "OP SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Output Level, sets its output level from 0 to 99.",
    "short_label": "OP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Coarse, sets coarse frequency from 0 to 31, interpreted by RATIO or FIXED mode.",
    "short_label": "OP COARSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Fine, sets fine frequency from 0 to 99.",
    "short_label": "OP FINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Detune, sets detune from −7 to +7.",
    "short_label": "OP DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Osc Mode, chooses RATIO or FIXED frequency mode.",
    "short_label": "OP OSC MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Rate 1, sets envelope rate 1 from 0 to 99.",
    "short_label": "OP RATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Rate 2, sets envelope rate 2 from 0 to 99.",
    "short_label": "OP RATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Rate 3, sets envelope rate 3 from 0 to 99.",
    "short_label": "OP RATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Rate 4, sets envelope rate 4 from 0 to 99.",
    "short_label": "OP RATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Level 1, sets envelope level 1 from 0 to 99.",
    "short_label": "OP LEVEL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Level 2, sets envelope level 2 from 0 to 99.",
    "short_label": "OP LEVEL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Level 3, sets envelope level 3 from 0 to 99.",
    "short_label": "OP LEVEL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Level 4, sets envelope level 4 from 0 to 99.",
    "short_label": "OP LEVEL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Key Velocity, sets velocity sensitivity from 0 to 7.",
    "short_label": "OP VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Amp Mod Sens, sets amplitude-modulation sensitivity from 0 to 3.",
    "short_label": "OP AMP MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Break Point, chooses the keyboard-scaling breakpoint across 100 notes from A−1 to C8.",
    "short_label": "OP BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Left Depth, sets scaling depth below the breakpoint from 0 to 99.",
    "short_label": "OP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Right Depth, sets scaling depth above the breakpoint from 0 to 99.",
    "short_label": "OP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Left Curve, chooses −LIN, −EXP, +EXP or +LIN below the breakpoint.",
    "short_label": "OP L CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Right Curve, chooses −LIN, −EXP, +EXP or +LIN above the breakpoint.",
    "short_label": "OP R CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "turn",
    "action": "On Rate Scaling, sets envelope-rate keyboard scaling from 0 to 7.",
    "short_label": "RATE SCALING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On On, toggles this operator’s temporary mute in either turn direction.",
    "short_label": "OP ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Solo, toggles a temporary solo and restores the previous mute switches when turned off.",
    "short_label": "OP SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Output Level, sets its output level from 0 to 99.",
    "short_label": "OP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Coarse, sets coarse frequency from 0 to 31, interpreted by RATIO or FIXED mode.",
    "short_label": "OP COARSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Fine, sets fine frequency from 0 to 99.",
    "short_label": "OP FINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Detune, sets detune from −7 to +7.",
    "short_label": "OP DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Osc Mode, chooses RATIO or FIXED frequency mode.",
    "short_label": "OP OSC MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Rate 1, sets envelope rate 1 from 0 to 99.",
    "short_label": "OP RATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Rate 2, sets envelope rate 2 from 0 to 99.",
    "short_label": "OP RATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Rate 3, sets envelope rate 3 from 0 to 99.",
    "short_label": "OP RATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Rate 4, sets envelope rate 4 from 0 to 99.",
    "short_label": "OP RATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Level 1, sets envelope level 1 from 0 to 99.",
    "short_label": "OP LEVEL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Level 2, sets envelope level 2 from 0 to 99.",
    "short_label": "OP LEVEL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Level 3, sets envelope level 3 from 0 to 99.",
    "short_label": "OP LEVEL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Level 4, sets envelope level 4 from 0 to 99.",
    "short_label": "OP LEVEL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Key Velocity, sets velocity sensitivity from 0 to 7.",
    "short_label": "OP VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Amp Mod Sens, sets amplitude-modulation sensitivity from 0 to 3.",
    "short_label": "OP AMP MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Break Point, chooses the keyboard-scaling breakpoint across 100 notes from A−1 to C8.",
    "short_label": "OP BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Left Depth, sets scaling depth below the breakpoint from 0 to 99.",
    "short_label": "OP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Right Depth, sets scaling depth above the breakpoint from 0 to 99.",
    "short_label": "OP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Left Curve, chooses −LIN, −EXP, +EXP or +LIN below the breakpoint.",
    "short_label": "OP L CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Right Curve, chooses −LIN, −EXP, +EXP or +LIN above the breakpoint.",
    "short_label": "OP R CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "turn",
    "action": "On Rate Scaling, sets envelope-rate keyboard scaling from 0 to 7.",
    "short_label": "RATE SCALING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On On, toggles this operator’s temporary mute in either turn direction.",
    "short_label": "OP ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Solo, toggles a temporary solo and restores the previous mute switches when turned off.",
    "short_label": "OP SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Output Level, sets its output level from 0 to 99.",
    "short_label": "OP LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Coarse, sets coarse frequency from 0 to 31, interpreted by RATIO or FIXED mode.",
    "short_label": "OP COARSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Fine, sets fine frequency from 0 to 99.",
    "short_label": "OP FINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Detune, sets detune from −7 to +7.",
    "short_label": "OP DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Osc Mode, chooses RATIO or FIXED frequency mode.",
    "short_label": "OP OSC MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Rate 1, sets envelope rate 1 from 0 to 99.",
    "short_label": "OP RATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Rate 2, sets envelope rate 2 from 0 to 99.",
    "short_label": "OP RATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Rate 3, sets envelope rate 3 from 0 to 99.",
    "short_label": "OP RATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Rate 4, sets envelope rate 4 from 0 to 99.",
    "short_label": "OP RATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Level 1, sets envelope level 1 from 0 to 99.",
    "short_label": "OP LEVEL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Level 2, sets envelope level 2 from 0 to 99.",
    "short_label": "OP LEVEL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Level 3, sets envelope level 3 from 0 to 99.",
    "short_label": "OP LEVEL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Level 4, sets envelope level 4 from 0 to 99.",
    "short_label": "OP LEVEL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Key Velocity, sets velocity sensitivity from 0 to 7.",
    "short_label": "OP VELOCITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Amp Mod Sens, sets amplitude-modulation sensitivity from 0 to 3.",
    "short_label": "OP AMP MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Break Point, chooses the keyboard-scaling breakpoint across 100 notes from A−1 to C8.",
    "short_label": "OP BREAK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Left Depth, sets scaling depth below the breakpoint from 0 to 99.",
    "short_label": "OP LEFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Right Depth, sets scaling depth above the breakpoint from 0 to 99.",
    "short_label": "OP RIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Left Curve, chooses −LIN, −EXP, +EXP or +LIN below the breakpoint.",
    "short_label": "OP L CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Right Curve, chooses −LIN, −EXP, +EXP or +LIN above the breakpoint.",
    "short_label": "OP R CURVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "turn",
    "action": "On Rate Scaling, sets envelope-rate keyboard scaling from 0 to 7.",
    "short_label": "RATE SCALING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L51-L69"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "115-161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L115-L161"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "450-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L450-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_pitch",
    "gesture": "turn",
    "action": "On Rate 1, sets pitch-envelope rate 1 from 0 to 99.",
    "short_label": "PITCH RATE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "70-73",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L70-L73"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_pitch",
    "gesture": "turn",
    "action": "On Level 1, sets pitch-envelope level 1 from −50 to +49.",
    "short_label": "PITCH LVL 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "70-73",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L70-L73"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "250-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L250-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_pitch",
    "gesture": "turn",
    "action": "On Rate 2, sets pitch-envelope rate 2 from 0 to 99.",
    "short_label": "PITCH RATE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "70-73",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L70-L73"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_pitch",
    "gesture": "turn",
    "action": "On Level 2, sets pitch-envelope level 2 from −50 to +49.",
    "short_label": "PITCH LVL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "70-73",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L70-L73"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "250-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L250-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_pitch",
    "gesture": "turn",
    "action": "On Rate 3, sets pitch-envelope rate 3 from 0 to 99.",
    "short_label": "PITCH RATE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "70-73",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L70-L73"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_pitch",
    "gesture": "turn",
    "action": "On Level 3, sets pitch-envelope level 3 from −50 to +49.",
    "short_label": "PITCH LVL 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "70-73",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L70-L73"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "250-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L250-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_pitch",
    "gesture": "turn",
    "action": "On Rate 4, sets pitch-envelope rate 4 from 0 to 99.",
    "short_label": "PITCH RATE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "70-73",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L70-L73"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_pitch",
    "gesture": "turn",
    "action": "On Level 4, sets pitch-envelope level 4 from −50 to +49.",
    "short_label": "PITCH LVL 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "70-73",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L70-L73"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "250-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L250-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_lfo",
    "gesture": "turn",
    "action": "On Wave, chooses TRI, SAW DN, SAW UP, SQUARE, SINE or S&HOLD.",
    "short_label": "DX LFO WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "74-82",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L74-L82"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_lfo",
    "gesture": "turn",
    "action": "On Speed, sets speed from 0 to 99.",
    "short_label": "DX LFO SPEED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "74-82",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L74-L82"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_lfo",
    "gesture": "turn",
    "action": "On Delay, sets delay from 0 to 99.",
    "short_label": "DX LFO DELAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "74-82",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L74-L82"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_lfo",
    "gesture": "turn",
    "action": "On Pitch Mod Depth, sets pitch modulation depth from 0 to 99.",
    "short_label": "DX PITCH MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "74-82",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L74-L82"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_lfo",
    "gesture": "turn",
    "action": "On Amp Mod Depth, sets amplitude modulation depth from 0 to 99.",
    "short_label": "DX AMP MOD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "74-82",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L74-L82"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_lfo",
    "gesture": "turn",
    "action": "On Pitch Mod Sens, sets pitch sensitivity from 0 to 7.",
    "short_label": "DX PIT SENS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "74-82",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L74-L82"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_lfo",
    "gesture": "turn",
    "action": "On Key Sync, sets key synchronisation OFF or ON.",
    "short_label": "DX LFO SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "74-82",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L74-L82"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "219-260",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L219-L260"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "125-131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L125-L131"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 1, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 2, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 3, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 4, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 5, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 6, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 7, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 8, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 9, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "turn",
    "action": "On Char 10, chooses a character from space through ~ without accelerated turning.",
    "short_label": "NAME CHAR 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "83-88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L83-L88"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "462-473",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L462-L473"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Global swing for all tracks; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "271-303",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L271-L303"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Edits this column’s value on the displayed page; empty columns and pages marked DRUM TRACK ignore the turn, and named choices advance one at a time.",
    "short_label": "VALUE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "445-482",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L445-L482"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "305-353",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L305-L353"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Chooses the drum lane without playing it.",
    "short_label": "DRUM LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "555-558",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L555-L558"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Picks the drum kit.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "619-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L619-L624"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "turn",
    "action": "Moves the cursor through the song entries.",
    "short_label": "ENTRY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "135-151",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L135-L151"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "854-880",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L854-L880"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1035-1038",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1035-L1038"
     }
    ]
   },
   {
    "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 with KNOB ACCEL on.",
    "short_label": "MASTER FILT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "420-427",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L420-L427"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Moves the selected track’s notes or drum hits one step left or right, while drum locks keep their original positions.",
    "short_label": "SHIFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "51-69",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L51-L69"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "436-439",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L436-L439"
     }
    ]
   },
   {
    "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 NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "440-465",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L440-L465"
     }
    ]
   },
   {
    "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 NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "441-447",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L441-L447"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "193-244",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L193-L244"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "466-481",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L466-L481"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 1; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "LEVEL T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "482-486",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L482-L486"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "419-489",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L419-L489"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Sets the first row: COLOR (including your installed theme), LIGHTS, SPEAKER LOWCUT, or SYSTEM's 2ND CORE; for 2ND CORE, right ON and left OFF; enabling a core that did not start takes effect at the next power-on; if a second-core job runs late, another power-on is needed to use that core again.",
    "short_label": "SETTING 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "9-22",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L9-L22"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "245-328",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L245-L328"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "372-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L372-L381"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/felucca.c",
      "lines": "40-42",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/felucca.c#L40-L42"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/cpu1.c",
      "lines": "18-28",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/cpu1.c#L18-L28"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Browses favourites, 20 factory presets, 32 voices from the selected bank and saved user presets; factory and user presets replace sound edits, while bank voices reset their quick controls and retain the track’s mix, sends and pattern.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "406-416",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L406-L416"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "634-681",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L634-L681"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Picks user slot 1-32.",
    "short_label": "USER SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "420-424",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L420-L424"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Picks section A-D.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "429",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L429"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-455",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L455"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Turn right twice within about 1.5 seconds to clear this track’s notes or hits; drum locks remain and undo can restore notes and length within available step space.",
    "short_label": "CLEAR PATT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "462-488",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L462-L488"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "639-646",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L639-L646"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "226-250",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L226-L250"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "On ARP MODE ORD, plays notes in the order their keys were pressed regardless of ARP 2 ORD.",
    "short_label": "ARP MODE ORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1076-1085",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1076-L1085"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "36-37",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L36-L37"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "On ARP 2, SWG changes the arp timing while the transport is stopped as well as playing; rates without swing stay straight.",
    "short_label": "ARP SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "432",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L432"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1054-1088",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1054-L1088"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets envelope attack time, or its tempo value when ESYNC is on.",
    "short_label": "ATK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "219-231",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L219-L231"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "73",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L73"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets envelope depth for the voice filter.",
    "short_label": "ENV FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "77",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L77"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Sets the outer LFO speed while LFO SYNC is OFF.",
    "short_label": "LFO RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "81",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L81"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "turn",
    "action": "Chooses free-running speed or a tempo division from four bars to 1/32.",
    "short_label": "LFO SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "133",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L133"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "8",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L8"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets outer LFO pitch depth.",
    "short_label": "LFO PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "85",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L85"
     }
    ]
   },
   {
    "mode": "fx_sends",
    "gesture": "turn",
    "action": "Sets this synth track’s drive amount.",
    "short_label": "DIST SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "105",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L105"
     }
    ]
   },
   {
    "mode": "fx_dist",
    "gesture": "turn",
    "action": "Sets this synth track’s distortion drive.",
    "short_label": "DIST DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "105",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L105"
     }
    ]
   },
   {
    "mode": "fx_chorus",
    "gesture": "turn",
    "action": "Sets this synth track’s chorus send; on drums this column is inactive.",
    "short_label": "CHO SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "106",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L106"
     }
    ]
   },
   {
    "mode": "fx_delay",
    "gesture": "turn",
    "action": "Sets this synth track’s delay send; on drums this column is inactive.",
    "short_label": "DLY SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "107",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L107"
     }
    ]
   },
   {
    "mode": "fx_reverb",
    "gesture": "turn",
    "action": "Sets this synth track’s reverb send; on drums this column is inactive.",
    "short_label": "REV SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "108",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L108"
     }
    ]
   },
   {
    "mode": "fx_slicer",
    "gesture": "turn",
    "action": "Chooses OFF, GATE or STUT for this track’s slicer.",
    "short_label": "SLICE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "117",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L117"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "61",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L61"
     }
    ]
   },
   {
    "mode": "fx_insert",
    "gesture": "turn",
    "action": "Chooses OFF, SOFT, HARD, FOLD, FUZZ, CRUSH, PHASR, FLANG or CHOR on this track.",
    "short_label": "INSERT TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "203-217",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "127",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L127"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "30",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L30"
     }
    ]
   },
   {
    "mode": "fx_insert2",
    "gesture": "turn",
    "action": "Sets the insert’s dry/wet blend on this track.",
    "short_label": "INSERT MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "203-217",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "131",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L131"
     }
    ]
   },
   {
    "mode": "sel",
    "gesture": "turn",
    "action": "Sets the selected synth track’s root note.",
    "short_label": "ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "97",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L97"
     }
    ]
   },
   {
    "mode": "sel2",
    "gesture": "turn",
    "action": "Transposes the selected synth track by up to 24 semitones each way.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "100",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L100"
     }
    ]
   },
   {
    "mode": "edit_quick",
    "gesture": "turn",
    "action": "Chooses one of twenty factory voices or thirty-two voices in the active bank.",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   },
   {
    "mode": "edit_shape",
    "gesture": "turn",
    "action": "Offsets operator release rates from −40 to +40, with rightward turns making releases longer.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Chooses POLY, MONO, LEG or UNI voice allocation.",
    "short_label": "VOICE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "109",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L109"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "51",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L51"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "turn",
    "action": "Chooses rotating voice allocation or reuse.",
    "short_label": "ALLOC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "113",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L113"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "54",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L54"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "action": "Sets global tempo from 40 to 240.",
    "short_label": "BPM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "150",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L150"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "action": "Sets the master hiss and crackle colour amount; boot resume resets it to zero.",
    "short_label": "DUST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L178"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "Chooses KEYS only or KEYS plus sequencer output.",
    "short_label": "MIDI OUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L418"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "162",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L162"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "38",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L38"
     }
    ]
   },
   {
    "mode": "global_drums",
    "gesture": "turn",
    "action": "Chooses OFF or MIDI channel 1–16 for drums, skipping channels already assigned to another track; panel edits revert at power-off and are absent from the backup.",
    "short_label": "DRUM CH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "174",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L174"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "13",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L13"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "418-424",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L418-L424"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1202-1205",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1202-L1205"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     }
    ]
   },
   {
    "mode": "midi",
    "gesture": "turn",
    "action": "Chooses OFF or MIDI channel 1–16 for track 1, skipping channels already assigned to another track; panel edits revert at power-off and are absent from the backup.",
    "short_label": "CH1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "185",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L185"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "13",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L13"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "139-178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L139-L178"
     }
    ]
   },
   {
    "mode": "midi2",
    "gesture": "turn",
    "action": "Chooses NOTES, CLOCK only or input CH 1–16 on the selected track; a channel selection comes back as CLOCK after power-off and then ignores incoming notes.",
    "short_label": "MIDI IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "164",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L164"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "39-40",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L39-L40"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     }
    ]
   },
   {
    "mode": "midi3",
    "gesture": "turn",
    "action": "Chooses OFF or channel 1–16 for the twenty-seven effect notes F3–G5; panel edits revert at power-off and are absent from the backup.",
    "short_label": "FX CH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "196",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L196"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "13",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L13"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "turn",
    "action": "Chooses OFF, VINYL, TAPE, RAIN, WIND, RADIO or ROOM.",
    "short_label": "TEXTURE SRC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "189",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L189"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "16",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L16"
     }
    ]
   },
   {
    "mode": "texture2",
    "gesture": "turn",
    "action": "Sets the texture movement period to 1, 2, 4, 8 or 16 bars.",
    "short_label": "TEXTURE RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "193",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L193"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "17",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L17"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Chooses OFF, UP, DN, UPDN, RND, ORD, OMNI or FLW, plus CHORD, WALK, THUMB, PINKY, DIVG, CONV, UP+8, DNUP and REPEAT.",
    "short_label": "ARP MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "89",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L89"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "36-37",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L36-L37"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Sets arpeggiator swing, including while transport is stopped.",
    "short_label": "ARP SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "432",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L432"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "93",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L93"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Sets this track’s length up to 128 steps from the shared 256-step pool; STEPS FULL means it could not fit.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "101",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L101"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "turn",
    "action": "Tunes this lane by up to 24 semitones each way.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "turn",
    "action": "Offsets this lane’s noise amount from −40 to +40.",
    "short_label": "NOISE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "turn",
    "action": "Sets this lane’s reverb send from 0 to 127.",
    "short_label": "LANE REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "turn",
    "action": "Sets the selected voice’s low-pass cutoff; 127 is fully open.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "485-488",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L485-L488"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Level of the selected track; if it was muted, the first turn unmutes it; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "271-303",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L271-L303"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Edits this column’s value on the displayed page; empty columns and pages marked DRUM TRACK ignore the turn, and named choices advance one at a time.",
    "short_label": "VALUE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "445-482",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L445-L482"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Transposes the step's notes (an empty step gets your last note); changed pitches start on this step instead of continuing from the one before.",
    "short_label": "NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "315-327",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L315-L327"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Moves the drum step cursor without playing a hit.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "555-558",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L555-L558"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Drum track level.",
    "short_label": "DRUM LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "619-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L619-L624"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "135-151",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L135-L151"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "In tempo recording, chooses 1, 2 or 4 bars within the shared step pool; STEPS FULL means the requested length could not fit.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "854-875",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L854-L875"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/core.h",
      "lines": "318-350",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/core.h#L318-L350"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1035-1038",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1035-L1038"
     }
    ]
   },
   {
    "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 with KNOB ACCEL on.",
    "short_label": "DUST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "420-427",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L420-L427"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Right doubles the note or hit pattern when it fits the shared 256-step pool and 128-step track limit, while left halves its length; drum locks are not copied or moved.",
    "short_label": "LEN X2 / 1/2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "70-92",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L70-L92"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/core.h",
      "lines": "320-336",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/core.h#L320-L336"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "436-439",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L436-L439"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "Sets step division from whole-note values 1/2, one bar and two bars, straight divisions 1/4, 1/8, 1/16 and 1/32, or triplets 8T and 16T.",
    "short_label": "DIV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "455-456",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L455-L456"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "42",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L42"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Drums: hit level ghost to hard; synths: step velocity 1-127; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "LEVEL/VEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "441-447",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L441-L447"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "193-244",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L193-L244"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn_while_holding:button_sel",
    "action": "One scale for all three synth tracks, chosen from 16.",
    "short_label": "ALL SCALES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "466-481",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L466-L481"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 2; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "LEVEL T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "482-486",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L482-L486"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "419-489",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L419-L489"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Sets the second row: ZOOM, KEYS or USB AUDIO; in SYSTEM it selects HARDWARE CALIBRATION; OCT+ opens it.",
    "short_label": "SETTING 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "9-22",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L9-L22"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "245-328",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L245-L328"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "372-381",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L372-L381"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/felucca.c",
      "lines": "40-42",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/felucca.c#L40-L42"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Either direction reloads the first DX7 preset immediately because this firmware has only one engine; unsaved sound edits are replaced without a question or undo.",
    "short_label": "DX7 DEFAULT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "406-416",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L406-L416"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "420-454",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L420-L454"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/engines.c",
      "lines": "3-10",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/engines.c#L3-L10"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Loads the slot's sound onto the track (two clicks: the first shows AGAIN, the second within about 1.5 s acts); the track's sound and unsaved edits are replaced, no undo; A running arp keeps its settings and notes; Held keyboard notes stop; HOLD still enables keyboard hold if the loaded sound has no arp, or latches that arp if it brings one.",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "418-435",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L418-L435"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/upreset.c",
      "lines": "283-311",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/upreset.c#L283-L311"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/upreset.c",
      "lines": "342-371",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/upreset.c#L342-L371"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "2596-2616",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2596-L2616"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "394-413",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L394-L413"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/upreset.c",
      "lines": "290-308",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/upreset.c#L290-L308"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Turn right twice within about 1.5 seconds while stopped to erase the chosen section immediately and remove its song entries for a later settings write; there is no undo and saving that section again does not restore the old song order.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "437-448",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L437-L448"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "602-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L602-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1180-1216",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1180-L1216"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Turn right twice within about 1.5 seconds to replace this track’s sound with the first DX7 preset; sound edits have no undo.",
    "short_label": "INIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "462-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L462-L494"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "420-454",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L420-L454"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets envelope decay time, or its tempo value when ESYNC is on.",
    "short_label": "DEC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "219-231",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L219-L231"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "74",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L74"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets envelope pitch depth.",
    "short_label": "ENV PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "78",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L78"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Chooses SIN, TRI, SAW, SQR or S&H for the outer LFO.",
    "short_label": "LFO WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "82",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L82"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "4",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L4"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "turn",
    "action": "Chooses NOTE retrigger or FREE running.",
    "short_label": "LFO TRIG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "134",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L134"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "9",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L9"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets outer LFO filter depth.",
    "short_label": "LFO FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "86",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L86"
     }
    ]
   },
   {
    "mode": "fx_sends",
    "gesture": "turn",
    "action": "Sets this synth track’s chorus send.",
    "short_label": "CHO SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "106",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L106"
     }
    ]
   },
   {
    "mode": "fx_dist",
    "gesture": "turn",
    "action": "Sets this synth track’s distortion tone.",
    "short_label": "DIST TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "122",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L122"
     }
    ]
   },
   {
    "mode": "fx_chorus",
    "gesture": "turn",
    "action": "Sets the shared chorus speed.",
    "short_label": "CHO RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "160",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L160"
     }
    ]
   },
   {
    "mode": "fx_delay",
    "gesture": "turn",
    "action": "Chooses the shared delay’s tempo division, including 1/4D.",
    "short_label": "DLY TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "154",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L154"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "43",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L43"
     }
    ]
   },
   {
    "mode": "fx_reverb",
    "gesture": "turn",
    "action": "Sets shared reverb size.",
    "short_label": "REV SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "158",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L158"
     }
    ]
   },
   {
    "mode": "fx_slicer",
    "gesture": "turn",
    "action": "Chooses one of sixteen slicer patterns.",
    "short_label": "SLICE PAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "118",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L118"
     }
    ]
   },
   {
    "mode": "fx_insert",
    "gesture": "turn",
    "action": "Sets DRIVE for drive types, BITS for CRUSH or RATE for swept types.",
    "short_label": "INSERT A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "203-217",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "128",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L128"
     }
    ]
   },
   {
    "mode": "fx_insert2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "203-217",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
     }
    ]
   },
   {
    "mode": "sel",
    "gesture": "turn",
    "action": "Chooses the selected synth track’s scale from sixteen choices.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "98",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L98"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "45-46",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L45-L46"
     }
    ]
   },
   {
    "mode": "sel2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     }
    ]
   },
   {
    "mode": "edit_quick",
    "gesture": "turn",
    "action": "Offsets modulator levels from −40 to +40.",
    "short_label": "BRITE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   },
   {
    "mode": "edit_shape",
    "gesture": "turn",
    "action": "Offsets DX7 feedback from −7 to +7.",
    "short_label": "FDBK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Sets glide time or rate.",
    "short_label": "GLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "110",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L110"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "turn",
    "action": "Sets unison detune.",
    "short_label": "DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "114",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L114"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "action": "Sets global swing from 0 to 100.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "151",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L151"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "action": "Sets kick-driven pumping of the synth mix.",
    "short_label": "DUCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "179",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L179"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "Chooses internal tempo, USB clock or TRS clock.",
    "short_label": "SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L418"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "163",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L163"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "59",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L59"
     }
    ]
   },
   {
    "mode": "global_drums",
    "gesture": "turn",
    "action": "Sets drum bus level.",
    "short_label": "DRUM LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "175",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L175"
     }
    ]
   },
   {
    "mode": "midi",
    "gesture": "turn",
    "action": "Chooses OFF or MIDI channel 1–16 for track 2, skipping channels already assigned to another track; panel edits revert at power-off and are absent from the backup.",
    "short_label": "CH2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "186",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L186"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "13",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L13"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "139-178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L139-L178"
     }
    ]
   },
   {
    "mode": "midi2",
    "gesture": "turn",
    "action": "Routes unassigned input channels to the selected track or ignores them; panel edits revert at power-off and are absent from the backup.",
    "short_label": "OTHER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "188",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L188"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "14",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L14"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     }
    ]
   },
   {
    "mode": "midi3",
    "gesture": "turn",
    "action": "Maps incoming drum notes as GM or repeating groups of sixteen beginning with KICK at note 36; panel edits revert at power-off and are absent from the backup.",
    "short_label": "DR MAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "197",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L197"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "49",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L49"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1132-1135",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1132-L1135"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "2714-2716",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2714-L2716"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "turn",
    "action": "Sets the background texture’s level.",
    "short_label": "TEXTURE LVL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "190",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L190"
     }
    ]
   },
   {
    "mode": "texture2",
    "gesture": "turn",
    "action": "Chooses texture during playback or continuously.",
    "short_label": "TEXTURE WHEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "194",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L194"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "18",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L18"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets the arpeggiator division.",
    "short_label": "ARP RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "90",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L90"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "41",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L41"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Sets arpeggiator note probability.",
    "short_label": "ARP PROB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "432",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L432"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "94",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L94"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Sets step division from whole-note values 1/2, one bar and two bars, straight divisions 1/4, 1/8, 1/16 and 1/32, or triplets 8T and 16T.",
    "short_label": "DIV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "102",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L102"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "42",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L42"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "turn",
    "action": "Offsets this lane’s envelope decay from −40 to +40.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "turn",
    "action": "Offsets this lane’s level from −20 to +10 dB in half-decibel steps.",
    "short_label": "LANE LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "turn",
    "action": "Sets the selected voice’s low-pass resonance.",
    "short_label": "RESO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "488-495",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L488-L495"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Sets this track’s length up to 128 steps from the space left in the shared 256-step pool; STEPS FULL means the requested length could not fit.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "289-300",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L289-L300"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/core.h",
      "lines": "318-350",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/core.h#L318-L350"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Edits this column’s value on the displayed page; empty columns and pages marked DRUM TRACK ignore the turn, and named choices advance one at a time.",
    "short_label": "VALUE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "445-482",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L445-L482"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Empty step: NOTE, TIE or REST; on a note: how many steps it lasts (LEN).",
    "short_label": "TIME/LEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "305-353",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L305-L353"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Right adds a normal hit and left removes the chosen lane’s hit on the cursor step; editing is refused during song playback.",
    "short_label": "HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "559-570",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L559-L570"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Sets the drum bus DRIVE.",
    "short_label": "DRIVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "619-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L619-L624"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "135-151",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L135-L151"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "854-880",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L854-L880"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1035-1038",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1035-L1038"
     }
    ]
   },
   {
    "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 with KNOB ACCEL on.",
    "short_label": "DUCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "420-427",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L420-L427"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "428-435",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L428-L435"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "51-104",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L51-L104"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "436-439",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L436-L439"
     }
    ]
   },
   {
    "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 with KNOB ACCEL on.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "440-465",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L440-L465"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "441-447",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L441-L447"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "193-244",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L193-L244"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "466-481",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L466-L481"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 3; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "LEVEL T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "482-486",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L482-L486"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "419-489",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L419-L489"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Sets KNOB ACCEL in SCREEN, NOTES in LIGHTS or USB SERIAL in AUDIO; in SYSTEM selects MIDI LEARN CLEAR for OCT+ to erase all learned mappings.",
    "short_label": "SETTING 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "9-22",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L9-L22"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "260-312",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L260-L312"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "374-380",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L374-L380"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/felucca.c",
      "lines": "40-44",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/felucca.c#L40-L44"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "406-417",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L406-L417"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Turn right twice within about 1.5 seconds while stopped to erase this user slot immediately, with no preset undo.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "418-435",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L418-L435"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/upreset.c",
      "lines": "343-371",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/upreset.c#L343-L371"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Loads the section over the working project (two clicks: the first shows AGAIN, the second within about 1.5 s acts); stopped only, no undo.",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "462-477",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L462-L477"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "651-667",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L651-L667"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "430",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L430"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets envelope sustain level.",
    "short_label": "SUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "219-231",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L219-L231"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "75",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L75"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Sets envelope shape depth.",
    "short_label": "ENV SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "79",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L79"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Sets the outer LFO’s starting phase.",
    "short_label": "LFO PHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "83",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L83"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "turn",
    "action": "Chooses bipolar or unipolar modulation.",
    "short_label": "LFO POL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "135",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L135"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "10",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L10"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets outer LFO shape depth.",
    "short_label": "LFO SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "87",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L87"
     }
    ]
   },
   {
    "mode": "fx_sends",
    "gesture": "turn",
    "action": "Sets this synth track’s delay send.",
    "short_label": "DLY SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "107",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L107"
     }
    ]
   },
   {
    "mode": "fx_dist",
    "gesture": "turn",
    "action": "Chooses SOFT, HARD, FUZZ or CRUSH distortion.",
    "short_label": "DIST TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "123",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L123"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "64",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L64"
     }
    ]
   },
   {
    "mode": "fx_chorus",
    "gesture": "turn",
    "action": "Sets the shared chorus modulation depth.",
    "short_label": "CHO DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "161",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L161"
     }
    ]
   },
   {
    "mode": "fx_delay",
    "gesture": "turn",
    "action": "Sets shared delay feedback.",
    "short_label": "DLY FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "155",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L155"
     }
    ]
   },
   {
    "mode": "fx_reverb",
    "gesture": "turn",
    "action": "Sets shared reverb damping.",
    "short_label": "REV DAMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "159",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L159"
     }
    ]
   },
   {
    "mode": "fx_slicer",
    "gesture": "turn",
    "action": "Sets the slicer’s tempo division.",
    "short_label": "SLICE RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "119",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L119"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "62",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L62"
     }
    ]
   },
   {
    "mode": "fx_insert",
    "gesture": "turn",
    "action": "Sets TONE for drive types, RATE for CRUSH or DEPTH for swept types.",
    "short_label": "INSERT B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "203-217",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "129",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L129"
     }
    ]
   },
   {
    "mode": "fx_insert2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "203-217",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
     }
    ]
   },
   {
    "mode": "sel",
    "gesture": "turn",
    "action": "Chooses ordinary pitches, scale snapping or a white-key scale layout.",
    "short_label": "QNT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "50",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L50"
     }
    ]
   },
   {
    "mode": "sel2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     }
    ]
   },
   {
    "mode": "edit_quick",
    "gesture": "turn",
    "action": "Offsets operator attack rates from −40 to +40, with rightward turns making attacks slower.",
    "short_label": "ATK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   },
   {
    "mode": "edit_shape",
    "gesture": "turn",
    "action": "Sets the voice low-pass cutoff, with 127 leaving it open.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Chooses RATE or TIME glide.",
    "short_label": "GLIDE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "111",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L111"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "52",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L52"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "turn",
    "action": "Sets this track’s pan.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "115",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L115"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "action": "Chooses click OFF, REC or ON.",
    "short_label": "CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "152",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L152"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "56",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L56"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "action": "Sets low-pass left of centre or high-pass right of centre, with centre open.",
    "short_label": "MASTER FILT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L180"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/fx.c",
      "lines": "398-399",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/fx.c#L398-L399"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "264-270",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L264-L270"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "Chooses NOTES, CLOCK only or input CH 1–16 on the selected track; a channel selection comes back as CLOCK after power-off and then ignores incoming notes.",
    "short_label": "MIDI IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L418"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "164",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L164"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "39-40",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L39-L40"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "418-424",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L418-L424"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1202-1205",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1202-L1205"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     }
    ]
   },
   {
    "mode": "global_drums",
    "gesture": "turn",
    "action": "Sets drum bus reverb send.",
    "short_label": "DRUM REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L176"
     }
    ]
   },
   {
    "mode": "midi",
    "gesture": "turn",
    "action": "Chooses OFF or MIDI channel 1–16 for track 3, skipping channels already assigned to another track; panel edits revert at power-off and are absent from the backup.",
    "short_label": "CH3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "187",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L187"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "13",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L13"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "139-178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L139-L178"
     }
    ]
   },
   {
    "mode": "midi2",
    "gesture": "turn",
    "action": "Chooses KEYS only or keys plus sequencer output.",
    "short_label": "MIDI OUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "162",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L162"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "38",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L38"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     }
    ]
   },
   {
    "mode": "midi3",
    "gesture": "turn",
    "action": "Chooses OFF or channel 1–16 for button CCs 102–115, with values 64–127 held and 0–63 released; panel edits revert at power-off and are absent from the backup.",
    "short_label": "REMOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "199",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L199"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "13",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L13"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "turn",
    "action": "Filters the texture, with low-pass to the left and high-pass to the right.",
    "short_label": "TEXTURE TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "191",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L191"
     }
    ]
   },
   {
    "mode": "texture2",
    "gesture": "turn",
    "action": "Enables kick-driven ducking of the texture.",
    "short_label": "TEXTURE DUCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "195",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L195"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets the arpeggiator span from one to four octaves.",
    "short_label": "ARP OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L91"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Holds the arp note pool, or enables keyboard hold when MODE is OFF.",
    "short_label": "ARP HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "432",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L432"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "95",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L95"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Sets swing added to the global amount.",
    "short_label": "TRACK SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "103",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L103"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "turn",
    "action": "Offsets this lane’s pitch sweep from −40 to +40.",
    "short_label": "SWEEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "turn",
    "action": "Sets this lane’s pan from left to right.",
    "short_label": "LANE PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "turn",
    "action": "Turn right twice within about 1.5 seconds to replace MY KIT in RAM with a new random kit; SAVE KIT writes it to flash and there is no kit undo.",
    "short_label": "DICE KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "turn",
    "action": "Offsets operator release rates, with rightward turns making them longer.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "495-507",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L495-L507"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "The selected track's pan; fast turns move farther on wider value ranges with KNOB ACCEL on.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "271-303",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L271-L303"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Edits this column’s value on the displayed page; empty columns and pages marked DRUM TRACK ignore the turn, and named choices advance one at a time.",
    "short_label": "VALUE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "445-482",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L445-L482"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Step flag: none, accent, slide, or both.",
    "short_label": "FLAG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "305-353",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L305-L353"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "552-572",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L552-L572"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Sets the drum bus compressor amount.",
    "short_label": "COMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "619-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L619-L624"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "135-151",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L135-L151"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "Leaves QUANT unchanged but can operate the page’s fourth control underneath, including PAN or a two-turn SAVE or NEW LOOP action.",
    "short_label": "PAGE VALUE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "850-881",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L850-L881"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1033-1051",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1033-L1051"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1111-1129",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1111-L1129"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "418-435",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L418-L435"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "462-505",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L462-L505"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "765-791",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L765-L791"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1035-1038",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1035-L1038"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "419-427",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L419-L427"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Does nothing.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "428-435",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L428-L435"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "51-104",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L51-L104"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "436-439",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L436-L439"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "Sets this track’s length up to 128 steps using space left in the shared 256-step pool; STEPS FULL means the requested length could not fit.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "440-465",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L440-L465"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/core.h",
      "lines": "320-336",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/core.h#L320-L336"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Drums: changes the held hits’ TUNE lock for the selected sound, replacing any other sound’s lock on each step; synths: sets pattern length within the shared step pool.",
    "short_label": "TUNE/LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "168-190",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L168-L190"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "440-465",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L440-L465"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "466-481",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L466-L481"
     }
    ]
   },
   {
    "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 with KNOB ACCEL on.",
    "short_label": "LEVEL T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "482-486",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L482-L486"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "240-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L240-L266"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "419-489",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L419-L489"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Sets USB RATE in AUDIO, taking effect at the next start; in SYSTEM selects ABOUT for OCT+ to open it, and the other sections have no fourth row.",
    "short_label": "RATE/ABOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "9-22",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L9-L22"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "278-291",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L278-L291"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "320-324",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L320-L324"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "374-380",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L374-L380"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/felucca.c",
      "lines": "40-44",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/felucca.c#L40-L44"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Right adds this factory voice, active-bank slot or user preset to up to 16 favourites, and left removes it; sound edits are not stored, and closing HOME’s menu while stopped commits the list to settings.",
    "short_label": "FAV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "535-606",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L535-L606"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "233-242",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L233-L242"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1019-1033",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1019-L1033"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Turn right twice within about 1.5 seconds while stopped to write this sound into the selected user slot immediately, replacing its former sound with no further question or preset undo; NO FLASH means it was not stored.",
    "short_label": "SAVE SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "418-435",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L418-L435"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/upreset.c",
      "lines": "343-371",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/upreset.c#L343-L371"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Turn right twice within about 1.5 seconds while stopped to write the working project into the chosen section immediately, replacing it without another question or section undo; SAVED (RAM) is not retained through power loss.",
    "short_label": "SAVE SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "462-480",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L462-L480"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "582-599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L582-L599"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Turn right twice within about 1.5 seconds to start a default working loop and clear its drum macros and locks while keeping sections A–D; sound and lock changes have no undo, and song playback must stop first.",
    "short_label": "NEW LOOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "355-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L355-L387"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "462-505",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L462-L505"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "226-250",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L226-L250"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "turn",
    "action": "Sets envelope release time, or its tempo value when ESYNC is on.",
    "short_label": "REL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "219-231",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L219-L231"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "76",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L76"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "turn",
    "action": "Switches the outer envelope’s attack, decay and release between time and tempo values.",
    "short_label": "ESYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "132",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L132"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "turn",
    "action": "Sets how slowly outer LFO modulation fades in.",
    "short_label": "LFO FADE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "84",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L84"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "turn",
    "action": "Sets outer LFO amplitude depth.",
    "short_label": "LFO AMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "88",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L88"
     }
    ]
   },
   {
    "mode": "fx_sends",
    "gesture": "turn",
    "action": "Sets this synth track’s reverb send.",
    "short_label": "REV SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "108",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L108"
     }
    ]
   },
   {
    "mode": "fx_dist",
    "gesture": "turn",
    "action": "Blends this synth track’s distortion with its dry sound.",
    "short_label": "DIST MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L124"
     }
    ]
   },
   {
    "mode": "fx_chorus",
    "gesture": "turn",
    "action": "Sets the shared chorus wet level.",
    "short_label": "CHO MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "183",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L183"
     }
    ]
   },
   {
    "mode": "fx_delay",
    "gesture": "turn",
    "action": "Sets the shared delay wet level.",
    "short_label": "DLY MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "157",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L157"
     }
    ]
   },
   {
    "mode": "fx_reverb",
    "gesture": "turn",
    "action": "Sets shared reverb pre-delay from 0 to 90 milliseconds.",
    "short_label": "REV PRE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "184",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L184"
     }
    ]
   },
   {
    "mode": "fx_slicer",
    "gesture": "turn",
    "action": "Sets the slicer’s depth.",
    "short_label": "SLICE DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "120",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L120"
     }
    ]
   },
   {
    "mode": "fx_insert",
    "gesture": "turn",
    "action": "Sets LEVEL for drive types, LPF for CRUSH or FDBK for swept types.",
    "short_label": "INSERT C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "203-217",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "130",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L130"
     }
    ]
   },
   {
    "mode": "fx_insert2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "203-217",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L203-L217"
     }
    ]
   },
   {
    "mode": "sel",
    "gesture": "turn",
    "action": "Chooses OFF, TRIAD, 7TH, 9TH, SUS4 or POWER chord voicings.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "121",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L121"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "63",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L63"
     }
    ]
   },
   {
    "mode": "sel2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     }
    ]
   },
   {
    "mode": "edit_quick",
    "gesture": "turn",
    "action": "Offsets operator decay rates from −40 to +40, with rightward turns making decays longer.",
    "short_label": "DEC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   },
   {
    "mode": "edit_shape",
    "gesture": "turn",
    "action": "Sets the voice low-pass resonance.",
    "short_label": "RESO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "turn",
    "action": "Chooses LAST, LOW or HIGH note priority.",
    "short_label": "PRIORITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "112",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L112"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "53",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L53"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "turn",
    "action": "Mutes or unmutes this track.",
    "short_label": "MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "116",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L116"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "47",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L47"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "turn",
    "action": "Sets global tuning from −50 to +50 cents.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "153",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L153"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "turn",
    "action": "Chooses the note-repeat division.",
    "short_label": "ROLL RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "181",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L181"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "65",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L65"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "turn",
    "action": "Shows processor load and ignores turns.",
    "short_label": "CPU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L418"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "165",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L165"
     }
    ]
   },
   {
    "mode": "global_drums",
    "gesture": "turn",
    "action": "Sets drum bus delay send.",
    "short_label": "DRUM DELAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "177",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L177"
     }
    ]
   },
   {
    "mode": "midi",
    "gesture": "turn",
    "action": "Chooses OFF or MIDI channel 1–16 for drums, skipping channels already assigned to another track; panel edits revert at power-off and are absent from the backup.",
    "short_label": "CH4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "174",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L174"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "13",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L13"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "139-178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L139-L178"
     }
    ]
   },
   {
    "mode": "midi2",
    "gesture": "turn",
    "action": "Sets MIDI pitch-bend range from 1 to 12 semitones; panel edits revert at power-off and are absent from the backup.",
    "short_label": "BEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "200",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L200"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     }
    ]
   },
   {
    "mode": "midi3",
    "gesture": "turn",
    "action": "Enables USB MIDI clock and start/stop output while sync is internal; panel edits revert at power-off and are absent from the backup.",
    "short_label": "CLOCK OUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "198",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L198"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "48",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L48"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "851-862",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "875-912",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1194-1214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "172-180",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "turn",
    "action": "Sets slow texture level and colour movement.",
    "short_label": "TEXTURE MOVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "192",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L192"
     }
    ]
   },
   {
    "mode": "texture2",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "turn",
    "action": "Sets arpeggiator note length.",
    "short_label": "ARP GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "92",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L92"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "turn",
    "action": "Chooses note-sorted or played order; MODE ORD always uses played order.",
    "short_label": "ARP ORDER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "432",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L432"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "96",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L96"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "55",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L55"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Sets sequenced note length.",
    "short_label": "GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "389-405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L389-L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "450-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L450-L459"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "104",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L104"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "turn",
    "action": "Offsets this lane’s brightness from −40 to +40.",
    "short_label": "BRIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "turn",
    "action": "Chooses the kit’s choke group, no group, or group A, B or C.",
    "short_label": "CHOKE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "turn",
    "action": "Turn right twice within about 1.5 seconds to randomise this sound in MY KIT in RAM; SAVE KIT writes it to flash and there is no sound undo.",
    "short_label": "DICE SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "573-624",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L573-L624"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "178-213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L178-L213"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "turn",
    "action": "Offsets the voice’s feedback.",
    "short_label": "FDBK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "495-507",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L495-L507"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "273-315",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/eng_dx7.c",
      "lines": "480-494",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L494"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Sets output volume and USB audio level unless USB AUDIO is FULL; if editor LIVE changed the level, move MASTER far enough to take control back.",
    "short_label": "VOLUME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "254-269",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L254-L269"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/fx.c",
      "lines": "1167-1199",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/fx.c#L1167-L1199"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/audio.c",
      "lines": "33",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/audio.c#L33"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F3 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays KICK.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes KICK in the sequencer without erasing it.",
    "short_label": "MUTE KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-264",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L247-L264"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Playing: section A from the next bar; stopped: loads A as the loop; several section keys in one SAVE hold make a looping chain.",
    "short_label": "PLAY A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-356",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L356"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L375-L387"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays KICK and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays KICK and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays KICK and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 1 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F#3 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Removes the lows; the effect lasts while the key is held.",
    "short_label": "KILL LOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 1–16 if this track reaches that page.",
    "short_label": "PAGE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "279-284",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L279-L284"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Turns MIDI LEARN on or off: turn a sloopDX knob, then move a controller knob to link them.",
    "short_label": "MIDI LEARN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "358-359",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L358-L359"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "799-826",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L799-L826"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays KICK and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays KICK and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays KICK and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the F chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD F",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G3 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays KICK 2.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes KICK 2 in the sequencer without erasing it.",
    "short_label": "MUTE KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-264",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L247-L264"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Playing: section B from the next bar; stopped: loads B as the loop; several in one hold make a chain.",
    "short_label": "PLAY B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-356",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L356"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L375-L387"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays KICK 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays KICK 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays KICK 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 2 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G#3 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Removes the mids; the effect lasts while the key is held.",
    "short_label": "KILL MID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 17–32 if this track reaches that page.",
    "short_label": "PAGE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "279-284",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L279-L284"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays KICK 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays KICK 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays KICK 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the C chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A3 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SNARE.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes SNARE in the sequencer without erasing it.",
    "short_label": "MUTE SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-264",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L247-L264"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Playing: section C from the next bar; stopped: loads C as the loop; several in one hold make a chain.",
    "short_label": "PLAY C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-356",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L356"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L375-L387"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays SNARE and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays SNARE and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays SNARE and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 3 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A#3 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Removes the highs; the effect lasts while the key is held.",
    "short_label": "KILL HIGH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 33–48 if this track reaches that page.",
    "short_label": "PAGE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "279-284",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L279-L284"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays SNARE and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays SNARE and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays SNARE and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the G chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD G",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays B3 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CLAP.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes CLAP in the sequencer without erasing it.",
    "short_label": "MUTE CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-264",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L247-L264"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Playing: section D from the next bar; stopped: loads D as the loop; several in one hold make a chain.",
    "short_label": "PLAY D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-356",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L356"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L375-L387"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays CLAP and selects that lane for the lane-control pages.",
    "short_label": "PICK CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays CLAP and selects that lane for the lane-control pages.",
    "short_label": "PICK CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays CLAP and selects that lane for the lane-control pages.",
    "short_label": "PICK CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 4 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays HAT.",
    "short_label": "HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes HAT in the sequencer without erasing it.",
    "short_label": "MUTE HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-264",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L247-L264"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Captures the working loop into section A now, then writes after playback stops, voices are quiet and input is idle for 1.5 seconds; a readable occupied section needs another press within 3 seconds and there is no section undo.",
    "short_label": "STORE A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "322-332",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L322-L332"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1132-1165",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1132-L1165"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1210-1216",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1210-L1216"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 5 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C#4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Spins the last moment backwards, then silence until released; the effect lasts while the key is held.",
    "short_label": "REWIND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 49–64 if this track reaches that page.",
    "short_label": "PAGE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "279-284",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L279-L284"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the Dm chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD Dm",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays OPEN HAT.",
    "short_label": "OPEN HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes OPEN HAT in the sequencer without erasing it.",
    "short_label": "MUTE OPEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-264",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L247-L264"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Captures the working loop into section B now, then writes after playback stops, voices are quiet and input is idle for 1.5 seconds; a readable occupied section needs another press within 3 seconds and there is no section undo.",
    "short_label": "STORE B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "322-332",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L322-L332"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1132-1165",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1132-L1165"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1210-1216",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1210-L1216"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays OPEN HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays OPEN HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays OPEN HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 6 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D#4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Pitches the mix up an octave; the effect lasts while the key is held.",
    "short_label": "OCT UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays OPEN HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays OPEN HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays OPEN HAT and selects that lane for the lane-control pages.",
    "short_label": "PICK DRUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the Am chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD Am",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays E4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays PEDAL (the pedal hi-hat).",
    "short_label": "PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes PEDAL (the pedal hi-hat) in the sequencer without erasing it.",
    "short_label": "MUTE PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-264",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L247-L264"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Captures the working loop into section C now, then writes after playback stops, voices are quiet and input is idle for 1.5 seconds; a readable occupied section needs another press within 3 seconds and there is no section undo.",
    "short_label": "STORE C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "322-332",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L322-L332"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1132-1165",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1132-L1165"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1210-1216",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1210-L1216"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays PEDAL and selects that lane for the lane-control pages.",
    "short_label": "PICK PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays PEDAL and selects that lane for the lane-control pages.",
    "short_label": "PICK PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays PEDAL and selects that lane for the lane-control pages.",
    "short_label": "PICK PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 7 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays RIM.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes RIM in the sequencer without erasing it.",
    "short_label": "MUTE RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-264",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L247-L264"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Captures the working loop into section D now, then writes after playback stops, voices are quiet and input is idle for 1.5 seconds; a readable occupied section needs another press within 3 seconds and there is no section undo.",
    "short_label": "STORE D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "322-332",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L322-L332"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1132-1165",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1132-L1165"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/project.c",
      "lines": "1210-1216",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1210-L1216"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays RIM and selects that lane for the lane-control pages.",
    "short_label": "PICK RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays RIM and selects that lane for the lane-control pages.",
    "short_label": "PICK RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays RIM and selects that lane for the lane-control pages.",
    "short_label": "PICK RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 8 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F#4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Sweeps a flanger over the mix; the effect lasts while the key is held.",
    "short_label": "FLANGER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays RIM and selects that lane for the lane-control pages.",
    "short_label": "PICK RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays RIM and selects that lane for the lane-control pages.",
    "short_label": "PICK RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays RIM and selects that lane for the lane-control pages.",
    "short_label": "PICK RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the Em chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD Em",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SNARE 2.",
    "short_label": "SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes SNARE 2 in the sequencer without erasing it.",
    "short_label": "MUTE SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the mix layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays SNARE 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays SNARE 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays SNARE 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 9 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G#4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Pans the mix left and right once a beat; the effect lasts while the key is held.",
    "short_label": "AUTO-PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays SNARE 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays SNARE 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays SNARE 2 and selects that lane for the lane-control pages.",
    "short_label": "PICK SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the G7 chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD G7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays LOW TOM.",
    "short_label": "LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes LOW TOM in the sequencer without erasing it.",
    "short_label": "MUTE LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the mix layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays LOW TOM and selects that lane for the lane-control pages.",
    "short_label": "PICK LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays LOW TOM and selects that lane for the lane-control pages.",
    "short_label": "PICK LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays LOW TOM and selects that lane for the lane-control pages.",
    "short_label": "PICK LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 10 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A#4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Holds the mix in the reverb while held; the effect lasts while the key is held.",
    "short_label": "FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays LOW TOM and selects that lane for the lane-control pages.",
    "short_label": "PICK LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays LOW TOM and selects that lane for the lane-control pages.",
    "short_label": "PICK LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays LOW TOM and selects that lane for the lane-control pages.",
    "short_label": "PICK LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the E7 chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD E7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays B4 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays HI TOM.",
    "short_label": "HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes HI TOM in the sequencer without erasing it.",
    "short_label": "MUTE HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays HI TOM and selects that lane for the lane-control pages.",
    "short_label": "PICK HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays HI TOM and selects that lane for the lane-control pages.",
    "short_label": "PICK HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays HI TOM and selects that lane for the lane-control pages.",
    "short_label": "PICK HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 11 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C5 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CRASH.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes CRASH in the sequencer without erasing it.",
    "short_label": "MUTE CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays CRASH and selects that lane for the lane-control pages.",
    "short_label": "PICK CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays CRASH and selects that lane for the lane-control pages.",
    "short_label": "PICK CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays CRASH and selects that lane for the lane-control pages.",
    "short_label": "PICK CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 12 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C#5 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Loops an eighth-note triplet; the effect lasts while the key is held.",
    "short_label": "LOOP 1/8T",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays CRASH and selects that lane for the lane-control pages.",
    "short_label": "PICK CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays CRASH and selects that lane for the lane-control pages.",
    "short_label": "PICK CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays CRASH and selects that lane for the lane-control pages.",
    "short_label": "PICK CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the D7 chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD D7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D5 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays RIDE.",
    "short_label": "RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes RIDE in the sequencer without erasing it.",
    "short_label": "MUTE RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Switches loop mode and song mode unless song recording is active, which shows REC IS ON.",
    "short_label": "LOOP/SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-356",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L356"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L375-L387"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "333-339",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L333-L339"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays RIDE and selects that lane for the lane-control pages.",
    "short_label": "PICK RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays RIDE and selects that lane for the lane-control pages.",
    "short_label": "PICK RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays RIDE and selects that lane for the lane-control pages.",
    "short_label": "PICK RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 13 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D#5 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Folds the mix to mono; the effect lasts while the key is held.",
    "short_label": "MONO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays RIDE and selects that lane for the lane-control pages.",
    "short_label": "PICK RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays RIDE and selects that lane for the lane-control pages.",
    "short_label": "PICK RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays RIDE and selects that lane for the lane-control pages.",
    "short_label": "PICK RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the Bb chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD Bb",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays E5 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SHAKER.",
    "short_label": "SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes SHAKER in the sequencer without erasing it.",
    "short_label": "MUTE SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Records the sections you play, from the next bar, into the song; again to stop.",
    "short_label": "SONG REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-356",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L356"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L375-L387"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays SHAKER and selects that lane for the lane-control pages.",
    "short_label": "PICK SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays SHAKER and selects that lane for the lane-control pages.",
    "short_label": "PICK SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays SHAKER and selects that lane for the lane-control pages.",
    "short_label": "PICK SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 14 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F5 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CONGA.",
    "short_label": "CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes CONGA in the sequencer without erasing it.",
    "short_label": "MUTE CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays CONGA and selects that lane for the lane-control pages.",
    "short_label": "PICK CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays CONGA and selects that lane for the lane-control pages.",
    "short_label": "PICK CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays CONGA and selects that lane for the lane-control pages.",
    "short_label": "PICK CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 15 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F#5 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing on a synth track in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1649",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1649"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Fades the mix out over two beats; the effect lasts while the key is held.",
    "short_label": "FADE OUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Drum track: toggles erase or mute for the white keys, keeping that choice after EDIT is released; synth track: erases this key's note unless chord mode or WHITE keys makes it silent.",
    "short_label": "ERASE/MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1591-1598",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1591-L1598"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1612-1622",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1612-L1622"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1745",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1745"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with SEL’s QNT set to 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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-628",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L628"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "189-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L189-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "99",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L99"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "With chord mode on or KEYS set to WHITE this black key is silent; otherwise it latches its mapped note until HOLD releases it.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "185-224",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L185-L224"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1226",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1226"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays CONGA and selects that lane for the lane-control pages.",
    "short_label": "PICK CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays CONGA and selects that lane for the lane-control pages.",
    "short_label": "PICK CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays CONGA and selects that lane for the lane-control pages.",
    "short_label": "PICK CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Chooses and plays the A7 chord, shifted by TRN and keyboard octave; the chosen chord remains after release and its notes can record.",
    "short_label": "CHORD A7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1395-1453",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1395-L1453"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1491-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1491-L1514"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this chord button’s notes while keeping the chosen chord for the strings and FLW tracks.",
    "short_label": "CHORD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1500-1514",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1500-L1514"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing in this layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-355",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L355"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G5 on the selected synth track, moved by the octave buttons and transpose; scale mapping, chord mode and OMNI can give it another job.",
    "short_label": "G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "226-232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L226-L232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays COWBELL.",
    "short_label": "COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "62-72",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L62-L72"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1641",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1641"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "200-225",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L200-L225"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "234-266",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L234-L266"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1657-1665",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1657-L1665"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "12-21",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "440-466",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L440-L466"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/punch.c",
      "lines": "65-71",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L65-L71"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1574-1582",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1574-L1582"
     }
    ]
   },
   {
    "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.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1600-1623",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1600-L1623"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "831-841",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L831-L841"
     }
    ]
   },
   {
    "mode": "layer_erase_mute",
    "gesture": "press_while_holding:button_edit",
    "action": "Mutes or unmutes COWBELL in the sequencer without erasing it.",
    "short_label": "MUTE COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1596-1599",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1596-L1599"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1631-1635",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1631-L1635"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1650-1656",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1650-L1656"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1291-1344",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1291-L1344"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1346-1354",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1346-L1354"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1706",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1706"
     }
    ]
   },
   {
    "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; editing is refused while the song order is playing.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-166",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L166"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "115-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L115-L124"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-295",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L289-L295"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "357-367",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L357-L367"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-264",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L247-L264"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "296-356",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L296-L356"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "375-387",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L375-L387"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "590-629",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L590-L629"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "press",
    "action": "Keeps this key's note or chord sounding after release; add notes while keys are down, or release them all and play again to replace the held notes.",
    "short_label": "KBD HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1142-1176",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1142-L1176"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1646-1672",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1646-L1672"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track in POLY mode, a mapped note played into a tied step joins up to three notes already sustaining there, without retriggering them; four notes fit, so an older one may be displaced; step entry still replaces notes.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1193-1213",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1193-L1213"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "400-431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L400-L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "447-483",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L447-L483"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "press",
    "action": "Plays COWBELL and selects that lane for the lane-control pages.",
    "short_label": "PICK COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "press",
    "action": "Plays COWBELL and selects that lane for the lane-control pages.",
    "short_label": "PICK COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "press",
    "action": "Plays COWBELL and selects that lane for the lane-control pages.",
    "short_label": "PICK COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1627-1640",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1627-L1640"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "531-538",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L531-L538"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends this key’s MIDI drum note and releases it in a free take; the drum sound follows its own decay.",
    "short_label": "DRUM UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1726-1731",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1726-L1731"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "press",
    "action": "Plays chord string 16 in ascending chord tones from the G3 range, shifted by octave; this string note can record.",
    "short_label": "STRING 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1455-1468",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1455-L1468"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1516-1520",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1516-L1520"
     }
    ]
   },
   {
    "mode": "omni",
    "gesture": "release",
    "action": "Releases this string’s note.",
    "short_label": "STRING UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1721-1725",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1721-L1725"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s notes unless sustain, keyboard hold or a latched arpeggiator keeps them.",
    "short_label": "NOTE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1224-1247",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1224-L1247"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Removes an occupied step’s selected hit or synth notes unless a knob edit kept it; the removed drum lane’s lock is deleted too.",
    "short_label": "STEP UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "147-167",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L147-L167"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "267-275",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L267-L275"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s effect if it is still the active punch-in key.",
    "short_label": "FX UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1681-1692",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1681-L1692"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops the repeat started by this key.",
    "short_label": "ROLL UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1703-1707",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1703-L1707"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops this key’s held erase selection; notes or hits already removed stay removed until undo.",
    "short_label": "ERASE UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1696-1702",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1696-L1702"
     }
    ]
   },
   {
    "mode": "keyboard_hold",
    "gesture": "release",
    "action": "Leaves the latched note or chord sounding while keyboard hold remains on.",
    "short_label": "HOLD UP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1216-1232",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1216-L1232"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1708-1719",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1708-L1719"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Plays the selected track using its current note, chord, drum or OMNI mapping while the menu remains open.",
    "short_label": "PLAY KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "995-1000",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L995-L1000"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1566-1679",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1566-L1679"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/seq.c",
      "lines": "1737-1757",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1737-L1757"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "202-221",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L202-L221"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "230-265",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L230-L265"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "267-283",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L267-L283"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "shows",
    "action": "The page's four values, its graph if any, the engine and sound, and the page number within its family; separate SONG and DRUMS screens do not count toward that number.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "738-780",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L738-L780"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "812-828",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L812-L828"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "830-880",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L830-L880"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "244-289",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L244-L289"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "787-811",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L787-L811"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "384-406",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L384-L406"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "423-434",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L423-L434"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "shows",
    "action": "Shows sixteen drum pads and dials for KIT, LEVEL, DRIVE and COMP.",
    "short_label": "DRUM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "339-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L339-L459"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_song.c",
      "lines": "18-85",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L18-L85"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "shows",
    "action": "Shows the recording arm, track lengths and MODE, LENGTH and START controls; QUANT is still drawn although KNOB 4 can change the underlying page instead.",
    "short_label": "REC READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "738-791",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L738-L791"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "850-881",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L850-L881"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1033-1051",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1033-L1051"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1111-1129",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1111-L1129"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "748-753",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L748-L753"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "701-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L701-L735"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "919-958",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L919-L958"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "shows",
    "action": "Draws the twenty-seven punch-in keys and the three active knob controls, with the held effect highlighted.",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "610-636",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L610-L636"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "419-427",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L419-L427"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "637-689",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L637-L689"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "shows",
    "action": "Shows sixteen step tiles with hit levels and ratchets; drum locks mark a step with a star, and held-step dials show note or sound, velocity or level, ratchet and drum TUNE.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "688-787",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L688-L787"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "788-828",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L788-L828"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "shows",
    "action": "Shows track mute and solo tiles, the tempo tile and four track-level dials.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "829-857",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L829-L857"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "858-899",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L858-L899"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "563-580",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L563-L580"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "shows",
    "action": "Shows section tabs and each setting with its knob; SYSTEM uses the fourth row for ABOUT instead of the key reminder, USB settings can show RESTART, and an unavailable second core shows NOT RUNNING.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "176-221",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L176-L221"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "shows",
    "action": "Shows sloopDX version, build date, credits, supply and core status, and the two-press FACTORY RESET command.",
    "short_label": "ABOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_menu.c",
      "lines": "143-174",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L143-L174"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "1136-1190",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1136-L1190"
     }
    ]
   },
   {
    "mode": "usb_rescue",
    "gesture": "shows",
    "action": "Shows the sloopDX USB rescue screen, an installer prompt and AUDIO OFF.",
    "short_label": "RESCUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/recovery.c",
      "lines": "41-70",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/recovery.c#L41-L70"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "280-294",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L280-L294"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Short messages replace the title line for a moment (KEY D, ERASED, AGAIN: SAVE, NEXT: B, LEARN, and so on).",
    "short_label": "MESSAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "104-114",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L104-L114"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "53-56",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L53-L56"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "shows",
    "action": "The sound list begins with favourites; FAV shows whether the current sound is included.",
    "short_label": "PRESETS FAV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "383-419",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L383-L419"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "872-880",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L872-L880"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "635-651",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L635-L651"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "shows",
    "action": "Sections A-D are shown as used or empty, with the selected section marked.",
    "short_label": "SECTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "442-461",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L442-L461"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "A fault screen shows the fault and stack address with second-core status and late-job count for 10 seconds before restarting.",
    "short_label": "FAULT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/main.c",
      "lines": "126-153",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L126-L153"
     }
    ]
   },
   {
    "mode": "env",
    "gesture": "shows",
    "action": "Shows ENV and its four control columns.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "395",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L395"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "env_dest",
    "gesture": "shows",
    "action": "Shows ENV DEST and its four control columns.",
    "short_label": "ENV DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "396",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L396"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "lfo",
    "gesture": "shows",
    "action": "Shows LFO and its four control columns.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "398",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L398"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "lfo2",
    "gesture": "shows",
    "action": "Shows LFO 2 and its four control columns.",
    "short_label": "LFO 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "399",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L399"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "lfo_dest",
    "gesture": "shows",
    "action": "Shows LFO DEST and its four control columns.",
    "short_label": "LFO DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "400",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L400"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "fx_sends",
    "gesture": "shows",
    "action": "Shows SENDS and its four control columns.",
    "short_label": "SENDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "401",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L401"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "fx_dist",
    "gesture": "shows",
    "action": "Shows DIST and its four control columns.",
    "short_label": "DIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "402",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L402"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "fx_chorus",
    "gesture": "shows",
    "action": "Shows CHORUS and its four control columns.",
    "short_label": "CHORUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "403",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L403"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "fx_delay",
    "gesture": "shows",
    "action": "Shows DELAY and its four control columns.",
    "short_label": "DELAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "404",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L404"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "fx_reverb",
    "gesture": "shows",
    "action": "Shows REVERB and its four control columns.",
    "short_label": "REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "405",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L405"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "fx_slicer",
    "gesture": "shows",
    "action": "Shows SLICER and its four control columns.",
    "short_label": "SLICER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "406",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L406"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "fx_insert",
    "gesture": "shows",
    "action": "Shows INSERT and its four control columns.",
    "short_label": "INSERT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "407",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L407"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "fx_insert2",
    "gesture": "shows",
    "action": "Shows INSERT 2 and its four control columns.",
    "short_label": "INSERT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "408",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L408"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "sel",
    "gesture": "shows",
    "action": "Shows SEL and its four control columns.",
    "short_label": "SEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "409",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L409"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "sel2",
    "gesture": "shows",
    "action": "Shows SEL 2 and its four control columns.",
    "short_label": "SEL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "410",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L410"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "edit_quick",
    "gesture": "shows",
    "action": "Shows DX7 VOICE quick page and its four control columns.",
    "short_label": "DX7 VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "412",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L412"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "edit_shape",
    "gesture": "shows",
    "action": "Shows DX7 SHAPE quick page and its four control columns.",
    "short_label": "DX7 SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "413",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L413"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "voice",
    "gesture": "shows",
    "action": "Shows VOICE track page and its four control columns.",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "414",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L414"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "voice2",
    "gesture": "shows",
    "action": "Shows VOICE 2 track page and its four control columns.",
    "short_label": "VOICE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "415",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L415"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "global",
    "gesture": "shows",
    "action": "Shows GLOBAL and its four control columns.",
    "short_label": "GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "416",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L416"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "master",
    "gesture": "shows",
    "action": "Shows MASTER and its four control columns.",
    "short_label": "MASTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "417",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L417"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "system",
    "gesture": "shows",
    "action": "Shows SYSTEM and its four control columns.",
    "short_label": "SYSTEM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "418",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L418"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "global_drums",
    "gesture": "shows",
    "action": "Shows DRUMS settings and its four control columns.",
    "short_label": "DRUMS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "419",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L419"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "midi",
    "gesture": "shows",
    "action": "Shows MIDI and its four control columns.",
    "short_label": "MIDI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "420",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L420"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "midi2",
    "gesture": "shows",
    "action": "Shows MIDI 2 and its four control columns.",
    "short_label": "MIDI 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "421",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L421"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "midi3",
    "gesture": "shows",
    "action": "Shows MIDI 3 and its four control columns.",
    "short_label": "MIDI 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "424",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L424"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "texture",
    "gesture": "shows",
    "action": "Shows TEXTURE and its four control columns.",
    "short_label": "TEXTURE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "425",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L425"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "texture2",
    "gesture": "shows",
    "action": "Shows TEXTURE 2 and its four control columns.",
    "short_label": "TEXTURE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "426",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L426"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "arp",
    "gesture": "shows",
    "action": "Shows ARP and its four control columns.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "431",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L431"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "arp2",
    "gesture": "shows",
    "action": "Shows ARP 2 and its four control columns.",
    "short_label": "ARP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "432",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L432"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "shows",
    "action": "Shows PATTERN and its four control columns.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/params.c",
      "lines": "434",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L434"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_draw.c",
      "lines": "926-951",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_draw.c#L926-L951"
     }
    ]
   },
   {
    "mode": "drum_lane1",
    "gesture": "shows",
    "action": "Shows the selected drum sound, pads, edited-lane marks and this lane-control page’s dials.",
    "short_label": "LANE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "339-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L339-L459"
     }
    ]
   },
   {
    "mode": "drum_lane2",
    "gesture": "shows",
    "action": "Shows the selected drum sound, pads, edited-lane marks and this lane-control page’s dials.",
    "short_label": "LANE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "339-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L339-L459"
     }
    ]
   },
   {
    "mode": "drum_lane3",
    "gesture": "shows",
    "action": "Shows the selected drum sound, pads, edited-lane marks and this lane-control page’s dials.",
    "short_label": "LANE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_studio.c",
      "lines": "339-459",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L339-L459"
     }
    ]
   },
   {
    "mode": "dx_op1",
    "gesture": "shows",
    "action": "Shows OP1’s selected row and neighbouring rows, with current values and the bank’s unsaved mark.",
    "short_label": "OP1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_op2",
    "gesture": "shows",
    "action": "Shows OP2’s selected row and neighbouring rows, with current values and the bank’s unsaved mark.",
    "short_label": "OP2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_op3",
    "gesture": "shows",
    "action": "Shows OP3’s selected row and neighbouring rows, with current values and the bank’s unsaved mark.",
    "short_label": "OP3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_op4",
    "gesture": "shows",
    "action": "Shows OP4’s selected row and neighbouring rows, with current values and the bank’s unsaved mark.",
    "short_label": "OP4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_op5",
    "gesture": "shows",
    "action": "Shows OP5’s selected row and neighbouring rows, with current values and the bank’s unsaved mark.",
    "short_label": "OP5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_op6",
    "gesture": "shows",
    "action": "Shows OP6’s selected row and neighbouring rows, with current values and the bank’s unsaved mark.",
    "short_label": "OP6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_top",
    "gesture": "shows",
    "action": "Shows the DX7 voice list, six visible rows, the selected value and an unsaved-bank mark.",
    "short_label": "DX LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_pitch",
    "gesture": "shows",
    "action": "Shows the pitch-envelope list, six visible rows, the selected value and an unsaved-bank mark.",
    "short_label": "DX LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_lfo",
    "gesture": "shows",
    "action": "Shows the DX7 LFO list, six visible rows, the selected value and an unsaved-bank mark.",
    "short_label": "DX LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_name",
    "gesture": "shows",
    "action": "Shows the voice-name character list, six visible rows, the selected value and an unsaved-bank mark.",
    "short_label": "DX LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "661-735",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L661-L735"
     }
    ]
   },
   {
    "mode": "dx_algorithm",
    "gesture": "shows",
    "action": "Shows the chosen algorithm’s operator routing, output-level marks and activity while notes sound.",
    "short_label": "DX ALGORITHM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_voice.c",
      "lines": "623-659",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L623-L659"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "The screen briefly shows the destination track and its zero-based program number after an accepted incoming Program Change.",
    "short_label": "MIDI PROGRAM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui.c",
      "lines": "688-716",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L688-L716"
     }
    ]
   }
  ]
 },
 "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "42-49",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L42-L49"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "205-206",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L205-L206"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "205-206",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L205-L206"
     }
    ]
   },
   {
    "mode": "stopped",
    "gesture": "off",
    "action": "Dark while the transport is stopped.",
    "short_label": "STOPPED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "42-49",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L42-L49"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "rec_ready",
    "gesture": "blinking",
    "action": "Blinks while armed.",
    "short_label": "ARMED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "207-208",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L207-L208"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "207-208",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L207-L208"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "207-208",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L207-L208"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "tracks",
    "gesture": "lit",
    "action": "Lit while the TRACKS screen shows.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "18",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L18"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "18",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L18"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "18",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L18"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   },
   {
    "mode": "dx_list",
    "gesture": "lit",
    "action": "Lit while the DX7 list is the displayed EDIT-family page.",
    "short_label": "DX LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "18",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L18"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "18",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L18"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "18",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L18"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "32-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L32-L39"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "28-39",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L28-L39"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_layers.c",
      "lines": "18",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_layers.c#L18"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "203-204",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L203-L204"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "lit",
    "action": "Lit on the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "32-35",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L32-L35"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "lit",
    "action": "Lit while the octave is below 0.",
    "short_label": "OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "215-218",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L215-L218"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Lit while held (ghost hits).",
    "short_label": "GHOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "212-214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L212-L214"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "Lit while REV THROW is on from the panel or the editor.",
    "short_label": "REV THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "209-211",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L209-L211"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/fx.c",
      "lines": "1122-1129",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/fx.c#L1122-L1129"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "227-229",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L227-L229"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/panel.c",
      "lines": "90-91",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L90-L91"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "lit",
    "action": "Lit while the octave is above 0.",
    "short_label": "OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "215-218",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L215-L218"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Lit while held (hard hits).",
    "short_label": "HARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "212-214",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L212-L214"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "Lit while ECHO THROW is on from the panel or the editor.",
    "short_label": "ECHO THROW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "209-211",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L209-L211"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/fx.c",
      "lines": "1122-1129",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/fx.c#L1122-L1129"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "144-147",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L144-L147"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "55-63",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "144-147",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L144-L147"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "55-78",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "111-124",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "125-128",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L125-L128"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "80-89",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L80-L89"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "lit",
    "action": "On drums with NOTES off, pattern sounds and held keys light; with NOTES on, sounding hits and held keys light instead.",
    "short_label": "ERASE HITS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "139-140",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L139-L140"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "91-102",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L91-L102"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "153-165",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L153-L165"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "The key of the effect being held is lit.",
    "short_label": "EFFECT ON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "109-110",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L109-L110"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "dim",
    "action": "With menu KEYS enabled, C keys or every white key glows at the LIGHTS level.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "180-192",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L180-L192"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "dim",
    "action": "With NOTES on, drum sounds present in the pattern glow dimly beneath sounding hits.",
    "short_label": "PATTERN GLOW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "153-165",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L153-L165"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "173-178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L173-L178"
     }
    ]
   },
   {
    "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "129-135",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L129-L135"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "173-178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L173-L178"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while track 1 is soloed.",
    "short_label": "T1 SOLO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "133-134",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L133-L134"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "173-178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L173-L178"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "173-178",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L173-L178"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "129-135",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L129-L135"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "129-135",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L129-L135"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "129-135",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L129-L135"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "133-134",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L133-L134"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "133-134",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L133-L134"
     }
    ]
   }
  ],
  "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": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "133-134",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L133-L134"
     }
    ]
   }
  ],
  "led_a4": [
   {
    "mode": "any",
    "gesture": "dim",
    "action": "Glows at the LIGHTS level when menu KEYS enables white-key backlighting, unless a brighter key indication takes priority.",
    "short_label": "BACKLIGHT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "180-192",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L180-L192"
     },
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "219-235",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L219-L235"
     }
    ]
   }
  ],
  "led_g5": [
   {
    "mode": "layer_mix",
    "gesture": "flash",
    "action": "Flashes on the beat.",
    "short_label": "BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "zvenson/dxsloop",
      "ref": "4.0",
      "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
      "path": "firmware/src/ui_input.c",
      "lines": "136-137",
      "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L136-L137"
     }
    ]
   }
  ]
 },
 "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": "There is no GitHub tag or release for 4.0: this map pins the site’s 4.0 package to commit a439f1de928c4c2c8e60d48ea79b09831102ecc7; the hub package is byte-identical to docs/firmware/sloopdx-4.0.fwsc there, the site-only commit after source commit 872ff07, and ui.c identifies the firmware as sloopDX 4.0.",
 "version_source": [
  {
   "kind": "source",
   "repo": "zvenson/dxsloop",
   "ref": "4.0",
   "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
   "path": "firmware/src/ui.c",
   "lines": "5-7",
   "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L5-L7"
  }
 ],
 "version_package_sha256": "5d330286fa42583db5d2e4eceb246dbcbcff6c8e716398f4c98ed87ab56c6c79",
 "licence_note": "Code is GPL-3.0-only; the Dexed-derived core also carries Apache-2.0, and inherited icons have separate asset terms; this map contains original wording and no firmware or asset copies.",
 "licence_source": [
  {
   "kind": "doc",
   "repo": "zvenson/dxsloop",
   "ref": "4.0",
   "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
   "path": "LICENSING.md",
   "lines": "3-8",
   "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/LICENSING.md#L3-L8"
  },
  {
   "kind": "doc",
   "repo": "zvenson/dxsloop",
   "ref": "4.0",
   "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
   "path": "README.md",
   "lines": "399-401",
   "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L399-L401"
  },
  {
   "kind": "doc",
   "repo": "zvenson/dxsloop",
   "ref": "4.0",
   "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
   "path": "LICENSING.md",
   "lines": "49",
   "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/LICENSING.md#L49"
  },
  {
   "kind": "doc",
   "repo": "zvenson/dxsloop",
   "ref": "4.0",
   "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
   "path": "README.md",
   "lines": "392",
   "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L392"
  }
 ],
 "page_scope_note": {
  "action": "On drums, ENV, LFO, SEL, synth EDIT/VOICE, SENDS, DIST and the sound-browser pages are inactive; CHORUS, DELAY and REVERB still expose their shared controls, with the first column inactive; SLICER, INSERT, PATTERN, TRACKS and global pages work.",
  "source": [
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/params.c",
    "lines": "441-481",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L441-L481"
   }
  ]
 },
 "switching_note": {
  "kept_on_unit": "Four sections, the working loop, thirty-two user presets, eight DX7 banks, MY KIT and device settings are stored separately; sections and presets refer to bank voices rather than embedding all their voice data. From the flash atlas: install (sloopDX loader): Program sectors are compared, changed sectors erased/programmed and verified; header/SPL are not rewritten by this loader (validated package transfer). install (update-record cleanup): Scans sector tails for update records and erases only a sector with a valid update record. Ordinary saved data is not an update record (After an install, erases 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’s staging-record sector 0xE4000 and, on a first install from stock, stock’s record sector 0xE8000. Saved music does not hold that record and is not at risk from this cleanup. This loader does not skip 0x97000–0xDFFFF). every start-up (staging cleanup): Erases all five staging sectors if any byte in the first 4 at E0000 or first 8 at E4F00 is not FF; the probes do not validate ownership and unrelated occupied bytes elsewhere alone do not trigger it (one of the two probes is nonblank). update while leaving sloopDX: Erases staging sectors, programs incoming loader and writes update record at E4F00; failed update path erases the same staging area (an installer starts the update handshake). first ordinary start-up: Startup reads managed stores without unconditional default initialization; an inherited IN CH n schedules an automatic settings rewrite at the first eligible stopped/quiet point (>=1.5 seconds input idle, >=5 seconds since zero/previous attempt). With no accepted working-loop payload, defaults can autosave after 20 seconds uptime, >=2.5 seconds input idle, stopped/no armed take/no menu/quiet; no edit or question is needed (normal startup; calibration boot is a separate deliberate path). What sloopDX writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over sloopDX's is in when_you_leave.",
  "lost": "The working loop saves only steps inside each track’s current length; shortening then saving drops the hidden steps, and an unsaved DX voice edit is outside the working-loop autosave. From the flash atlas: Other firmwares reading sloopDX's data: WaveLoop FM-1 lists sloopDX's user presets 1–16; user presets 17–32, 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); Felucca lists sloopDX's user presets 1–16; user presets 17–32, 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); Rainbow Mode lists sloopDX's user presets 1–16; user presets 17–32, 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); SLOOP takes over sloopDX's settings, calibration, song order, MIDI, theme and favourites, converting them (Saving settings removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds); 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 Floyd FM takes over sloopDX's settings, calibration, song order, MIDI, theme and favourites, converting them (Saving settings removes sloopDX’s light options, learned MIDI controls, theme and favourites from that copy. The shared calibration and song order still load); FM1 Quest takes over sloopDX's settings, calibration, song order, MIDI, theme and favourites, converting them (Saving settings removes sloopDX’s saved MIDI controls, theme and favourites. Quest can read sloopDX’s saved playing options as game preferences or progress); JIANT takes over sloopDX's user presets 1–16; user presets 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); Melodee shows sloopDX's DX7 bank 1 voices 1–16 as OLD FORMAT and asks before replacing them; ChoralRoot lists sloopDX's user presets 1–16; user presets 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 sloopDX's user presets 1–16; user presets 17–32, but plays them differently; fm1-chord lists sloopDX's user presets 1–16; user presets 17–32, but plays them differently (fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept); MAKU lists sloopDX's user presets 1–16; user presets 17–32, but plays them differently; Skiff lists sloopDX's user presets 1–16; user presets 17–32, but plays them differently (The same saved sound format does not guarantee the same sound or pattern playback); ORBIT takes over sloopDX's user presets 1–16; user presets 17–32, converting them (Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play); 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.; ORBIT reads shared settings and calibration; the next settings write can discard preferences or music setup it does not retain.; winampFM Synth reads shared settings and calibration; the next settings write can discard preferences or music setup it does not retain.. What sloopDX reads of other firmwares' data: sloopDX takes over SLOOP's settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites, converting them; sloopDX lists SLOOP's user sounds U01-U16; user sounds U17-U32, but plays them differently (Only supported older sounds in the first sound engine appear, and they play as DX7 sounds. Other sounds stay hidden until their slots are replaced); sloopDX lists ChoralRoot's 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), but plays them differently (These saved sounds are played as DX7 voices, so they can sound unrelated to the originals. Both halves of a DX7 bank must be readable. Loading a different bank replaces them); sloopDX takes over Hortator's settings and panel calibration, converting them; 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); sloopDX takes over ORBIT's settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences, 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 reads and uses SLOOP Floyd FM's settings, panel calibration and song order (New DX7 settings use defaults. Favourite and sound choices use the new firmware’s bank); sloopDX 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. Synth parts play as DX7 sounds, with different engine and voice choices; Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy. Synth parts play as DX7 sounds, with different engine and voice choices); sloopDX lists SLOOP Floyd FM's user sounds U01–U16; user sounds U17–U32, 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); sloopDX takes over winampFM Synth's settings, panel calibration, song order, SYN kits and MIDI, 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 winampFM Synth'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); sloopDX 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. Synth parts play as DX7 sounds, with different engine and voice choices); sloopDX lists Felucca [Salt]'s user sounds U01-U16; user sounds U17-U32, 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); sloopDX lists FM1 Move's user sounds U01–U16; user sounds U17–U32, 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); sloopDX 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 (Saving settings can change Quest’s game options, unlocked hero and which animations count as seen, because the firmwares read those saved options differently. Song order and calibration load; Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy. Synth parts play as DX7 sounds, with different engine and voice choices; Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy. Synth parts play as DX7 sounds, with different engine and voice choices); sloopDX lists FM1 Quest's user sounds U01–U16; user sounds U17–U32, 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). Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "In the web editor’s Projects tab, Save a backup reads the unit and downloads its working loop, four sections, thirty-two user presets, settings, active DX7 bank and MY KIT, plus a non-default MIDI appendix and installed theme; learned CC mappings and SYNC, OUT and IN NOTES/CLOCK choices are included, but panel edits to CH1–CH4, OTHER, BEND, FX CH, DR MAP, REMOTE and CLK OUT are missing, so note those separately, store bank edits first, select each bank and save a separate backup, and note favourites because these and the selected-bank number are absent.",
  "restore": "Restore from a file asks once, then replaces the objects it contains one by one while stopped; it puts the bank into the slot currently selected on the receiving unit, leaves the other seven banks and omitted optional MIDI/theme objects as they were, and applies the working loop now for later autosave.",
  "going_back": "Earlier sloopDX projects are converted when their format checks pass; 4.0 projects cannot open in 3.x, and older versions do not know the added arp choices, so keep a backup made before updating. sloopDX’s section saves, sends to the FM-1, erases and restores, SONG REC writes, automatic writes of pending sections after live capture, SONG REC, a conversion or a warm reset and before updates or USB update mode, user-sound saves, sends to the FM-1, erases and restores, DX7-bank saves, sends to the FM-1, erases, restores and automatic saves of an edited bank when changing banks, and FACTORY RESET 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.",
  "cross_firmware": "Back up with the firmware that made the work BEFORE the first sloopDX start, and back up sloopDX before leaving it. See the switching advice in this section.",
  "source": [
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "24-110",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L24-L110"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "427-486",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L427-L486"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "669-725",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L669-L725"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/editor.c",
    "lines": "362-407",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/editor.c#L362-L407"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/editor.c",
    "lines": "412-525",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/editor.c#L412-L525"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "web/editor.html",
    "lines": "1421-1481",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/web/editor.html#L1421-L1481"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "web/editor.html",
    "lines": "3959-3986",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/web/editor.html#L3959-L3986"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui.c",
    "lines": "607-632",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L607-L632"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "851-862",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "875-912",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "1194-1214",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/main.c",
    "lines": "172-180",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/editor.c",
    "lines": "506-525",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/editor.c#L506-L525"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "1150-1178",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1150-L1178"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "782-806",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L782-L806"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui.c",
    "lines": "595-605",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L595-L605"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/main.c",
    "lines": "373-381",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L373-L381"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/storage.c",
    "lines": "58-68",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/storage.c#L58-L68"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/storage.c",
    "lines": "180-199",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/storage.c#L180-L199"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ota.c",
    "lines": "396-410",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ota.c#L396-L410"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/main.c",
    "lines": "190-194",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L190-L194"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "web/editor.html",
    "lines": "1421-1464",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/web/editor.html#L1421-L1464"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "firmware/src/editor.c",
    "lines": "469",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/firmware/src/editor.c#L469"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "firmware/src/editor.c",
    "lines": "582-592",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/firmware/src/editor.c#L582-L592"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "firmware/src/project.c",
    "lines": "379-388",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/firmware/src/project.c#L379-L388"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "firmware/src/project.c",
    "lines": "712-721",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/firmware/src/project.c#L712-L721"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "926-981",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L926-L981"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "1019-1034",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1019-L1034"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/storage.c",
    "lines": "75-112",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/storage.c#L75-L112"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/panel.c",
    "lines": "98-110",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/panel.c#L98-L110"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "898-912",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L898-L912"
   },
   {
    "kind": "source",
    "repo": "isod89/sloop-fm1",
    "ref": "v2.7.1",
    "commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
    "path": "firmware/src/project.c",
    "lines": "939-955",
    "url": "https://github.com/isod89/sloop-fm1/blob/4ec1ac829fd2bdf2c571ea215fb3d62477d01220/firmware/src/project.c#L939-L955"
   }
  ],
  "first_start_autosave": "With no readable sloopDX working loop, the first autosave can write defaults about 20 seconds after the first start, while stopped, quiet and untouched for 2.5 seconds, without a press or question. See the switching advice in this section for the affected saved work.",
  "sloop_warning": "After sloopDX’s first autosave, SLOOP cannot read the working loop, and SLOOP’s own next autosave erases the last SLOOP copy; current sections do not transfer either way, settings only partly carry, and sloopDX’s editor refuses a SLOOP 2.7.1 backup before writing anything.",
  "settings_overwrite": "An inherited MIDI IN channel can become CLOCK and cause a settings rewrite at the first eligible quiet moment without a press or question. See the switching advice in this section for the affected saved work. Closing HOME’s menu for the first time also writes without a question when the previous firmware’s settings are unreadable. Any sloopDX settings write leaves SLOOP 2.7.1 using default SYN1–SYN4 kits instead of its saved kits.",
  "later_saves": "Later section and user-preset saves receive no extra foreign-data warning question. See the switching advice in this section for the affected saved work.",
  "update_cleanup": "When a start finds occupied update-area probes, it erases that area without asking or checking which firmware wrote it. See the switching advice in this section for the affected saved work.",
  "dx_stores": "DX bank stores, bank selection and MY KIT stores can overwrite overlapping data without a question about the previous firmware. See the switching advice in this section for the affected saved work.",
  "melodee_range_note": "Melodee U037–U054 is outside these sloopDX writes; see the switching advice in this section for the affected saved work.",
  "closed_firmware_caveat": "Stock V15 has no backup of its own: write down its 16 patterns, and to keep its presets, install Baud Girl and export all 128 with her Device Manager. In Baud Girl, back up with Device Manager before starting sloopDX. See the switching advice in this section for the affected saved work.",
  "foreign_layout_basis": "flash-atlas/atlas.json objects.short/holds/copies; refresh/work/{fm106,hortator,obervave,polly,skiff}.storage.json. Melodee ranges use short/holds, not legacy ids; U037-U054 is E5000/E6000, while U109-U126 is 9F000/FE000.",
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns).",
    "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 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"
       },
       {
        "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 (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 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": "user sample slot 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, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot 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": "project slot 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": "project slot 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": "project slot 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": "project slot 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 presets 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 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 (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 choose FACTORY RESET in ABOUT and confirm (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 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 (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": [
     "sloopDX 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.",
     "sloopDX 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; user sample slot USR2; settings, button calibration, favourites, MIDI LEARN map. At risk by itself, under a condition: user sample slot USR1. At risk when you act: project slot A; project slot B; project slot C; project slot D; user presets 1-16; user presets 17-32. sloopDX 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. sloopDX 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 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 slot 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, 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 synthesized drum kits and MIDI settings from that saved copy. Favourite sound numbers can also refer to different sounds"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "changed to the new format: Saving settings removes SLOOP’s synthesized drum kits and MIDI settings from that saved copy. Favourite sound numbers can also refer to different sounds"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "changed to the new format: Saving settings removes SLOOP’s synthesized drum kits and MIDI settings from that saved copy. Favourite sound numbers can also refer to different sounds"
       },
       {
        "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: Saving settings removes SLOOP’s synthesized drum kits and MIDI settings from that saved copy. Favourite sound numbers can also refer to different sounds"
       },
       {
        "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: Saving settings removes SLOOP’s synthesized drum kits and MIDI settings from that saved copy. Favourite sound numbers can also refer to different sounds"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot 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": "song section A (a whole project)",
      "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": "song section B (a whole project)",
      "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": "song section C (a whole project)",
      "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": "song section D (a whole project)",
      "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 U01-U16",
      "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 U17-U32",
      "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": [
     "sloopDX reads user sounds U01-U16 until you write over the saved data. Only supported older sounds in the first sound engine appear, and they play as DX7 sounds. Other sounds stay hidden until their slots are replaced.",
     "sloopDX reads user sounds U17-U32 until you write over the saved data. Only supported older sounds in the first sound engine appear, and they play as DX7 sounds. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: the music in progress (autosave); user sample slot USR2; settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk by itself, under a condition: user sample slot USR1. 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 sounds U01-U16; user sounds U17-U32. sloopDX reads user sounds U01-U16 until you write over the saved data. Only supported older sounds in the first sound engine appear, and they play as DX7 sounds. Other sounds stay hidden until their slots are replaced. sloopDX reads user sounds U17-U32 until you write over the saved data. Only supported older sounds in the first sound engine appear, and they play as DX7 sounds. 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": "x0x",
    "name": "X0X",
    "flags": "ACS",
    "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 during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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 save the song order (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 or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 2",
      "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": "break loops slot 1",
      "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": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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: the whole X0X project (settings, sound, all 32 patterns, song, knob motion); break loops slot 2. At risk by itself, under a condition: break loops slot 1. At risk when you act: X0X button calibration.",
    "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 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"
       },
       {
        "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 (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 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": "song 6: four sections (whole projects)",
      "effect": "partly lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "partly lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "effect": "partly lost"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "partly 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": "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 save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "song 3: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "partly 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": "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 save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "song 4: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "partly 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": "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 save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "song 5: four sections (whole projects)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "partly 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": "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 save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "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": "song 1 section B (a whole project)",
      "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": "song 1 section C (a whole project)",
      "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": "song 1 section D (a whole project)",
      "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 U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 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 (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 choose FACTORY RESET in ABOUT and confirm (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 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 (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": [
     "sloopDX 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.",
     "sloopDX 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; song 6: four sections (whole projects) (partly lost); settings, calibration, favourites, MENU options. At risk by itself, under a condition: song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects); song 5: four sections (whole projects). 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); user sounds U01-U16; user sounds U17-U32. sloopDX 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. sloopDX 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 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": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "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": "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 MY KIT 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": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "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": "project B: patterns, song, sounds, motion, recordings",
      "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": "project C: patterns, song, sounds, motion, recordings",
      "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": "shared user presets U289-U378",
      "effect": "partly lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "partly lost"
       },
       {
        "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 project from the editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "partly lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "shared user presets U379-U384",
      "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": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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 choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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: shared user presets U109-U126; project D: patterns, song, sounds, motion, recordings; settings, factory favourites, calibration, saved template. At risk by itself, under a condition: project A: patterns, song, sounds, motion, recordings; project B: patterns, song, sounds, motion, recordings; project C: patterns, song, sounds, motion, recordings. At risk when you act: shared user presets U289-U378 (partly lost); shared user presets U379-U384; shared user presets U001-U018; shared user presets U019-U036.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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 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": "128 saved sounds with their complete engine patches",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "some or all lost"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "some or all lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase the selected bank from the web editor (the computer asks first)",
        "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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "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": "CZ-1 bank B (16 tones)",
      "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": "CZ-1 bank C (16 tones)",
      "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": "CZ-1 bank D (16 tones)",
      "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": "CZ-1 bank E (16 tones)",
      "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": "CZ-1 bank F (16 tones)",
      "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": "CZ-1 bank G (16 tones)",
      "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": "CZ-1 bank H (16 tones)",
      "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": "last session saved with a global save",
      "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": "favourite marks, chord/bass type and filter",
      "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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: 32 imported DX7 voices; 128 saved sounds with their complete engine patches (some or all lost); options, playing setup and panel calibration. At risk by itself, under a condition: 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.",
    "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 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"
       },
       {
        "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 (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 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": "user sample slot 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 and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot 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": "project 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": "project 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": "project 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": "project 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 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 (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 choose FACTORY RESET in ABOUT and confirm (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 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 (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": [
     "sloopDX 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.",
     "sloopDX 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; user sample slot USR2; settings and panel calibration. At risk by itself, under a condition: user sample slot USR1. At risk when you act: project A; project B; project C; project D; user sounds 1–16; user sounds 17–32. sloopDX 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. sloopDX 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, only when either checked part of the space used to prepare firmware updates contains data",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "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": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "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 install or update firmware",
        "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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "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 save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "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 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 MY KIT 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 a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start an update from sloopDX",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install or update firmware",
        "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": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older stored user bank, if present (Beta4 does not store new edits)",
      "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"
       }
      ]
     }
    ],
    "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": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user samples 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 and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "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": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "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 at power-on (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 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: 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 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 settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples 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": "project 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": "project 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": "project 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": "project 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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: user samples USR2; settings and panel calibration. At risk by itself, under a condition: user samples USR1. At risk when you act: project A; project B; project C; project D.",
    "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": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 1",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 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 settings, MIDI controls or a theme with computer commands (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"
       }
      ]
     },
     {
      "object": "pattern 2",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 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 settings, MIDI controls or a theme with computer commands (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"
       }
      ]
     },
     {
      "object": "pattern 3",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 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 settings, MIDI controls or a theme with computer commands (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"
       }
      ]
     },
     {
      "object": "pattern 4",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 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 settings, MIDI controls or a theme with computer commands (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"
       }
      ]
     },
     {
      "object": "pattern 5",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 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 settings, MIDI controls or a theme with computer commands (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"
       }
      ]
     },
     {
      "object": "pattern 6",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 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 settings, MIDI controls or a theme with computer commands (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"
       }
      ]
     },
     {
      "object": "pattern 7",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 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 settings, MIDI controls or a theme with computer commands (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"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 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 settings, MIDI controls or a theme with computer commands (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: saved programs and global settings; pattern 1 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 2 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 3 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 4 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 5 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 6 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 7 (its B-track sound can change if it uses a saved program; its pattern notes remain); 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 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": "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": "Optional QY70 style bank",
      "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": "damaged (part written over)"
       },
       {
        "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": "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 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 or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "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": "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 or erase a DX7 bank with a computer tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "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": "Polly shared memory 6",
      "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": "Polly shared memory 7",
      "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": "Polly shared memory 8",
      "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": "Polly shared memory 9",
      "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": "Polly shared memory 10",
      "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": "Polly shared memory 11",
      "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": "Polly shared memory 12",
      "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": "Polly shared memory 13",
      "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": "Polly shared memory 14",
      "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": "Polly shared memory 15",
      "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": "Polly shared memory 16",
      "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": "All four Polly songs",
      "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": "Polly shared memory 1",
      "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": "Polly shared memory 2",
      "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": "Polly shared memory 3",
      "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": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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 by itself, under a condition: 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. At risk when you act: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; 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": "user sounds’ own FM6 patches",
      "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 and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (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 during use [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 or enter UPDATE MODE [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 choose FACTORY RESET in ABOUT and confirm (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 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 (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 during use [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 or enter UPDATE MODE [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 choose FACTORY RESET in ABOUT and confirm (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 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 (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": "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": "project 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": "project 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": "project 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": "project 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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "sloopDX 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.",
     "sloopDX 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: user sounds’ own FM6 patches; user sample USR2; 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 by itself, under a condition: user sample USR1. At risk when you act: project A; project B; project C; project D. sloopDX 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. sloopDX 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": "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 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": "your old FM6 bank (B1–B27)",
      "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 and any slice positions you set in SLICE",
      "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": "Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (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 during use [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 or enter UPDATE MODE [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 choose FACTORY RESET in ABOUT and confirm (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 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 (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 during use [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 or enter UPDATE MODE [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 choose FACTORY RESET in ABOUT and confirm (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 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 (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 and any slice positions you set in SLICE",
      "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": "Project A: four tracks and their sounds, notes, automation, song chain and name",
      "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": "Project B: four tracks and their sounds, notes, automation, song chain and name",
      "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": "Project C: four tracks and their sounds, notes, automation, song chain and name",
      "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": "Project D: four tracks and their sounds, notes, automation, song chain and name",
      "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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "sloopDX 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.",
     "sloopDX 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); User sample USR2 and any slice positions you set in SLICE; 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 by itself, under a condition: User sample USR1 and any slice positions you set in SLICE. 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. sloopDX 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. sloopDX 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 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": "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 or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "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 save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank 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 send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable 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": "user wavetable USR2",
      "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": "user wavetable USR3",
      "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": "multis M01–M02",
      "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": "multis M03–M04",
      "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": "multis M05–M06",
      "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": "multis M07–M08",
      "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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved patches; settings and panel setup. At risk by itself, under a condition: user wavetable USR1; user wavetable USR2; user wavetable USR3. At risk when you act: multis M01–M02; multis M03–M04; multis M05–M06; multis M07–M08.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fimba",
    "name": "FiMba-1 beta",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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 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": "inherited user sample 2",
      "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 and calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 1",
      "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": "inherited project 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": "inherited project 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": "inherited project 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": "inherited project 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": "inherited user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 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 (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 choose FACTORY RESET in ABOUT and confirm (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 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 (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": [
     "sloopDX 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.",
     "sloopDX 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; inherited user sample 2; settings and calibration. At risk by itself, under a condition: inherited user sample 1. At risk when you act: inherited project A; inherited project B; inherited project C; inherited project D; inherited user preset bank 1; inherited user preset bank 2. sloopDX 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. sloopDX 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 choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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 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": "uploaded sample USR2 and optional SLICE markers",
      "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, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "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": "chord preset P1: full synth project",
      "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": "chord preset P2: full synth project",
      "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": "chord preset P3: full synth project",
      "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": "chord preset P4: full synth project",
      "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 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 (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 choose FACTORY RESET in ABOUT and confirm (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 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 (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": [
     "sloopDX 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.",
     "sloopDX 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; uploaded sample USR2 and optional SLICE markers; settings, panel calibration, four chord preset setups and the current chord setup. At risk by itself, under a condition: uploaded sample USR1 and optional SLICE markers. 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; user sounds 1-16; user sounds 17-32. sloopDX 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. sloopDX 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": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "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)"
   },
   {
    "from": "fumi",
    "name": "FuMi-1",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FuMi-1 sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FuMi-1 button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "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 samples 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": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples 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": "project 1",
      "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": "project 2",
      "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": "project 3",
      "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": "project 4",
      "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 U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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 choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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: working music (autosave); user samples USR2; preferences, calibration and MIDI LEARN map. At risk by itself, under a condition: user samples USR1. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32.",
    "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 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 and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "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": "slice positions you set for 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": "song 1",
      "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": "song 2",
      "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": "song 3",
      "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": "last session saved for the next start",
      "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 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 (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 choose FACTORY RESET in ABOUT and confirm (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 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 (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": [
     "sloopDX 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.",
     "sloopDX 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; user sample USR2; settings, calibration and favourites. At risk by itself, under a condition: user sample USR1; slice positions you set for USR1. At risk when you act: song 1; song 2; song 3; last session saved for the next start; user sounds 1–16; user sounds 17–32. sloopDX 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. sloopDX 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": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved section A",
      "effect": "lost",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 you leave a bank with unsaved voice changes and a bank is active [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 at power-on (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 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) [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 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) [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 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 save the active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 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 MY KIT 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 a DX7 bank 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 or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a 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 send settings, MIDI controls or a theme with computer commands (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 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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 you leave a bank with unsaved voice changes and a bank is active [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 at power-on (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 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) [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 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) [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 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 save the active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 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 MY KIT 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 a DX7 bank 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 or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a 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 send settings, MIDI controls or a theme with computer commands (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 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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 you leave a bank with unsaved voice changes and a bank is active [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 at power-on (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 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) [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 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) [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 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 save the active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 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 MY KIT 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 a DX7 bank 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 or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a 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 send settings, MIDI controls or a theme with computer commands (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 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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 you leave a bank with unsaved voice changes and a bank is active [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 at power-on (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 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) [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 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) [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 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 save the active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 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 MY KIT 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 a DX7 bank 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 or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a 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 send settings, MIDI controls or a theme with computer commands (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",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 or enter UPDATE MODE",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active [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 at power-on (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 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) [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) [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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm) [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 active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 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 MY KIT 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 a DX7 bank 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 or erase a DX7 bank with a 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 send settings, MIDI controls or a theme with computer commands (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": "sample slot 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": "USER sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "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 you leave a bank with unsaved voice changes and a bank is active [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 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) [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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm) [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 or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send MY KIT 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 a DX7 bank 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 or erase a DX7 bank with a 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"
       }
      ],
      "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 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 you leave a bank with unsaved voice changes and a bank is active [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 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) [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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm) [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 or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send MY KIT 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 a DX7 bank 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 or erase a DX7 bank with a 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"
       }
      ],
      "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": "settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences",
      "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": "sample slot 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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "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; sample slot USR2; 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); settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences. At risk by itself, under a condition: sample slot USR1.",
    "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 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot 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, panel calibration and song order",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "kept: sloopDX can read it"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "kept: sloopDX can read it"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "kept: sloopDX can read it"
       },
       {
        "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 (asks first)",
        "effect": "kept: sloopDX 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 the song order (without asking)",
        "effect": "kept: sloopDX can read it"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot 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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "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 U17–U32",
      "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": [
     "Older sections change to DX7 parts. Saving a changed section, or the working loop being saved automatically, writes a format Floyd cannot open.",
     "sloopDX reads user sounds U01–U16 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 U17–U32 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 settings, panel calibration and song order until you write over the saved data. New DX7 settings use defaults. Favourite and sound choices use the new firmware’s bank."
    ],
    "owner_text": "At risk by itself: the working loop kept by autosave; user sample slot USR2; settings, panel calibration and song order. At risk by itself, under a condition: user sample slot USR1. At risk when you act: song section A; song section B; song section C; song section D; user sounds U01–U16; user sounds U17–U32. Older sections change to DX7 parts. Saving a changed section, or the working loop being saved automatically, writes a format Floyd cannot open. sloopDX reads user sounds U01–U16 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 U17–U32 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 settings, panel calibration and song order until you write over the saved data. New DX7 settings use defaults. Favourite and sound choices use the new firmware’s bank.",
    "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 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": "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, panel calibration, song order, SYN kits and MIDI",
      "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": "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 (whole project)",
      "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 (whole project)",
      "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 (whole project)",
      "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 (whole project)",
      "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": [
     "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 music kept by autosave; sample USR2; settings, panel calibration, song order, SYN kits and MIDI. At risk by itself, under a condition: sample USR1. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); user sounds 1-16; user sounds 17-32. 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)"
   },
   {
    "from": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sixteen six-track patterns",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "some or all lost"
       },
       {
        "way": "automatically during use",
        "effect": "some or all 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": "some or all lost"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "some or all 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": "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 project from the editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "song order and four scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "some or all lost"
       },
       {
        "way": "automatically during use",
        "effect": "some or all 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": "some or all lost"
       },
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "some or all 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": "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 project from the editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "eight saved sampler takes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "some or all lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "twelve uploaded sounds or DX7 banks",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "some or all lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send MY KIT from the web editor (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "screen language pack",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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": "system preferences and last pattern",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 save or erase a user sound (asks or waits for you to turn again for that slot only; 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; song order and four scenes; eight saved sampler takes (some or all lost); twelve uploaded sounds or DX7 banks (some or all lost). At risk when you act: 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": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "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": "screen preferences, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 (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 song order (without asking)",
        "effect": "lost"
       },
       {
        "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": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "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 U17-U32",
      "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": [
     "sloopDX reads user sounds U01-U16 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 U17-U32 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: user sample USR2; screen preferences, calibration and favourites. At risk by itself, under a condition: user sample USR1. At risk when you act: project 1; project 2; project 3; project 4; user sounds U01-U16; user sounds U17-U32. sloopDX reads user sounds U01-U16 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 U17-U32 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)"
   },
   {
    "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 during use",
        "effect": "lost"
       },
       {
        "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 install or update firmware",
        "effect": "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": "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 MY KIT 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": "the older FM6 patch bank PIGEON no longer uses",
      "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": "older FM6 patches for user presets",
      "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 in the older format",
      "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": "preferences, MIDI LEARN and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1 in the older format",
      "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": "slice positions set by hand in the older format",
      "effect": "partly lost",
      "ways": [
       {
        "way": "automatically, only when you leave a bank with unsaved voice changes and a bank is active",
        "effect": "partly lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "partly lost"
       },
       {
        "way": "when you erase the selected bank 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": "partly lost"
       },
       {
        "way": "when you save the active bank by tapping EDIT twice on Store (asks first: press again to confirm)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the DX7 list (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the active bank from the web editor (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send a DX7 bank from the web editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase a DX7 bank with a computer tool (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "chops, drum-pad and performance edits",
      "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": "saved pattern 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": "saved pattern 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": "saved pattern 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": "saved pattern 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": "older user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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 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 (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 choose FACTORY RESET in ABOUT and confirm (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 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 (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": [
     "sloopDX 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.",
     "sloopDX 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; user sample USR2 in the older format; preferences, MIDI LEARN and panel calibration. At risk by itself, under a condition: user sample USR1 in the older format; slice positions set by hand in the older format (partly lost); chops, drum-pad and performance edits. At risk when you act: saved pattern A; saved pattern B; saved pattern C; saved pattern D; older user preset bank 1; older user preset bank 2. sloopDX 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. sloopDX 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": "sample slot 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, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "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 the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 you leave a bank with unsaved voice changes and a bank is active [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 the selected bank 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 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) [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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm) [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 active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 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 MY KIT 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 a DX7 bank 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 or erase a DX7 bank with a 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 send settings, MIDI controls or a theme with computer commands (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": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 you leave a bank with unsaved voice changes and a bank is active [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 the selected bank 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 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) [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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm) [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 active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 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 MY KIT 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 a DX7 bank 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 or erase a DX7 bank with a 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 send settings, MIDI controls or a theme with computer commands (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": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "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 the saved input setting selects one MIDI channel rather than NOTES or CLOCK [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 you leave a bank with unsaved voice changes and a bank is active [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 at power-on (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 choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm) [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 the selected bank 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 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) [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 MY KIT by tapping SAVE twice from KIT or LANE (asks first: press again to confirm) [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 active bank by tapping EDIT twice on Store (asks first: press again to confirm) [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 active bank from the DX7 list (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 the active bank 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 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 MY KIT 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 a DX7 bank 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 or erase a DX7 bank with a 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 send settings, MIDI controls or a theme with computer commands (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": "sample slot 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": "user sounds U01–U16",
      "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 U17–U32",
      "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": [
     "sloopDX reads user sounds U01–U16 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 U17–U32 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: sample slot USR2; settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk by itself, under a condition: sample slot USR1. At risk when you act: user sounds U01–U16; user sounds U17–U32. sloopDX reads user sounds U01–U16 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 U17–U32 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)"
   },
   {
    "from": "fm1quest",
    "name": "FM1 Quest",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (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": "damaged (part written over)"
       },
       {
        "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 send MY KIT from the web editor (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Saving settings can change Quest’s game options, unlocked hero and which animations count as seen, because the firmwares read those saved options differently. Song order and calibration load"
       },
       {
        "way": "automatically, only when sloopDX reads Quest’s saved keyboard LED speed and fade as an input-channel choice",
        "effect": "changed to the new format: Saving settings can change Quest’s game options, unlocked hero and which animations count as seen, because the firmwares read those saved options differently. Song order and calibration load"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "changed to the new format: Saving settings can change Quest’s game options, unlocked hero and which animations count as seen, because the firmwares read those saved options differently. Song order and calibration load"
       },
       {
        "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 (asks first)",
        "effect": "changed to the new format: Saving settings can change Quest’s game options, unlocked hero and which animations count as seen, because the firmwares read those saved options differently. Song order and calibration load"
       },
       {
        "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: Saving settings can change Quest’s game options, unlocked hero and which animations count as seen, because the firmwares read those saved options differently. Song order and calibration load"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "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": "sample USR2",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you erase a section and confirm it on the SECTION page (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "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": "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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section and confirm it on the SECTION 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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you save a section with SAVE and white keys 5–8 (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. Synth parts play as DX7 sounds, with different engine and voice choices"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "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 U17–U32",
      "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": [
     "Older sections change to DX7 parts. Saving a changed section, or the working loop being saved automatically, writes a format Quest cannot open. Export Quest’s training results separately. They are not songs or samples.",
     "sloopDX reads user sounds U01–U16 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 U17–U32 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 music (autosave); sample USR3; settings, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: sample USR1; sample USR2. At risk when you act: song section A; song section B; song section C; song section D; user sounds U01–U16; user sounds U17–U32. Older sections change to DX7 parts. Saving a changed section, or the working loop being saved automatically, writes a format Quest cannot open. Export Quest’s training results separately. They are not songs or samples. sloopDX reads user sounds U01–U16 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 U17–U32 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)"
   },
   {
    "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",
     "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"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): section A; section B; section C; section D; working loop; 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.",
    "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",
     "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"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): section A; section B; section C; section D; working loop; 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.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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": "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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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 send 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 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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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 send 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 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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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 send 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 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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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 send 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": "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 a sample to the FM-1 from the 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 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 send 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"
       },
       {
        "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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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 presets 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 sample to the FM-1 from the 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 (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 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"
       },
       {
        "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"
       }
      ],
      "first_way_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 presets 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 sample to the FM-1 from the 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 (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 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"
       },
       {
        "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"
       }
      ],
      "first_way_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"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Felucca may start with beta 2ND CORE ON or OFF after sloopDX. Do not rely on your earlier choice: sloopDX 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."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: section A; section B; section C; section D; working loop; 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 (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; other writes can also erase it); user presets 17–32 (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; other writes can also erase it). Felucca may start with beta 2ND CORE ON or OFF after sloopDX. Do not rely on your earlier choice: sloopDX 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.",
    "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": "lost"
       },
       {
        "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 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 from the 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 send 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"
       },
       {
        "way": "when you start an update or enter UPDATE MODE",
        "effect": "lost"
       }
      ]
     },
     {
      "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 saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       },
       {
        "way": "automatically, only if SLOOP can still read older SLOOP settings with default MIDI controls and older working music whose drum MIDI channel differs from those settings (sloopDX’s own settings cannot trigger this update)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       },
       {
        "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 removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       },
       {
        "way": "when you send the song from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls because SLOOP expects them to be stored after its drum kits. Theme and favourites load, but favourite numbers can refer to different sounds"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "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 (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 (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"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the 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 send 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 hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "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 (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 (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"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the 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 send 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 hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "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 (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 (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"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the 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 send 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 hold SAVE and press white key 5–8 to save a section (without asking)",
        "effect": "lost"
       },
       {
        "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 (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 (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"
       },
       {
        "way": "when you save a section from the web editor LIVE page (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the 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 send 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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": "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 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": "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 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 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 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 (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a sample from the 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 send 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 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 (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a sample from the 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 send 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 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 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 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 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)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACS",
    "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"
       },
       {
        "way": "when you upload samples or break loops (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": "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"
       },
       {
        "way": "when you upload samples or break loops (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": "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"
       },
       {
        "way": "when you upload samples or break loops (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": "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"
       },
       {
        "way": "when you upload samples or break loops (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": "user presets 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"
       },
       {
        "way": "when you upload samples or break loops (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": "settings, calibration, song order, MIDI, theme and favourites",
      "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": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload samples or break loops (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": "working loop",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you upload samples or break loops (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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "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."
    ],
    "owner_text": "At risk by itself: section A; section B; section C; section D; user presets 17–32; settings, calibration, song order, MIDI, theme and favourites. At risk when you act: 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; working loop (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay). 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.",
    "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": "settings, calibration, song order, MIDI, theme 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 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 make a song with several sections using GEN (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"
       },
       {
        "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) [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 save a project 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 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 a section (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"
       },
       {
        "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": "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": "DX7 bank 1 voices 1–16",
      "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": "DX7 bank 1 voices 17–32",
      "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": "DX7 bank 2 voices 1–16",
      "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": "DX7 bank 2 voices 17–32",
      "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": "DX7 bank 3 voices 1–16",
      "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": "DX7 bank 3 voices 17–32",
      "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": "DX7 bank 4 voices 1–16",
      "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": "DX7 bank 4 voices 17–32",
      "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": "DX7 bank 5 voices 1–16",
      "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": "DX7 bank 5 voices 17–32",
      "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": "DX7 bank 6 voices 1–16",
      "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": "DX7 bank 6 voices 17–32",
      "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": "DX7 bank 7 voices 1–16",
      "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": "DX7 bank 7 voices 17–32",
      "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": "DX7 bank 8 voices 1–16",
      "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": "DX7 bank 8 voices 17–32",
      "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": "selected DX7 bank",
      "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": "MY KIT",
      "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 presets 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 make a song with several sections using GEN (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"
       },
       {
        "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 project (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"
       },
       {
        "way": "when you save a project 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 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 a section (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"
       },
       {
        "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"
       }
      ],
      "first_way_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 presets 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 make a song with several sections using GEN (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"
       },
       {
        "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 project (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"
       },
       {
        "way": "when you save a project 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 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 a section (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"
       },
       {
        "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"
       }
      ],
      "first_way_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": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk by itself, under a condition: working loop. 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 (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; other writes can also erase it); user presets 17–32 (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; other writes can also erase it).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "flags": "ACSQ",
    "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 erase a slot (asks first: press again to confirm) [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 import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (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"
       },
       {
        "way": "when you rename a slot (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"
       },
       {
        "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) [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 save a project 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 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"
       },
       {
        "way": "only if you say yes to replacing the old data [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": "user presets 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 erase a slot (asks first: press again to confirm) [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 import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (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"
       },
       {
        "way": "when you rename a slot (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"
       },
       {
        "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) [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 save a project 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 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"
       },
       {
        "way": "only if you say yes to replacing the old data [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": "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 erase a slot (asks first: press again to confirm) [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 import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (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"
       },
       {
        "way": "when you rename a slot (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"
       },
       {
        "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) [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 save a project 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 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"
       },
       {
        "way": "only if you say yes to replacing the old data [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": "settings, calibration, song order, MIDI, theme 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 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 erase a slot (asks first: press again to confirm) [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 import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (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"
       },
       {
        "way": "when you rename a slot (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"
       },
       {
        "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) [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 save a project 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 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"
       },
       {
        "way": "only if you say yes to replacing the old data [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": "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 erase a slot (asks first: press again to confirm) [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 import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (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"
       },
       {
        "way": "when you rename a slot (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"
       },
       {
        "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) [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 save a project 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 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"
       },
       {
        "way": "only if you say yes to replacing the old data [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": "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 erase a slot (asks first: press again to confirm) [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 import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (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"
       },
       {
        "way": "when you rename a slot (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"
       },
       {
        "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) [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 save a project 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 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"
       },
       {
        "way": "only if you say yes to replacing the old data [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": "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 erase a slot (asks first: press again to confirm) [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 import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (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"
       },
       {
        "way": "when you rename a slot (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"
       },
       {
        "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) [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 save a project 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 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"
       },
       {
        "way": "only if you say yes to replacing the old data [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 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a slot (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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a slot (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 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a slot (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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a slot (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 voices 17–32",
      "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 voices 1–16",
      "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 voices 17–32",
      "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 voices 1–16",
      "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 voices 17–32",
      "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 voices 1–16",
      "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 voices 17–32",
      "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 voices 1–16",
      "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 voices 17–32",
      "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 voices 1–16",
      "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 voices 17–32",
      "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": "selected DX7 bank",
      "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": "MY KIT",
      "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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "only if you say yes to replacing the old data",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: working loop; user presets 1–16; user presets 17–32; settings, calibration, song order, MIDI, theme and favourites. At risk by itself, under a condition: section A; section B; section C; section D. At risk when you act: 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. At risk only if you answer yes to its replace question: DX7 bank 1 voices 1–16.",
    "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, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: user presets 1–16.",
    "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, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: user presets 1–16.",
    "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": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [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": "automatically during use [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": "automatically, only if a matching save is left and the space for the other saved copy still contains data [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": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [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": "automatically, only if the first saved copy still contains data and either no valid matching save is left or the newest save is in the second copy [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": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [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": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [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 choose Import 0.21 sounds from the device manager (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 choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [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 choose Place all from the device manager (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 choose Undo from the device manager (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"
       },
       {
        "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) [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 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) [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 confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [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 delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 delete a sound with the computer question skipped (without asking; writes the whole bank) [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 delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [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 delete all user sounds or reset sounds to factory defaults from the device manager (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 delete selected sounds from the device manager (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 hold OCT- and OCT+ while powering on (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"
       },
       {
        "way": "when you hold SAVE for a global save (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"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [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 keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (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"
       },
       {
        "way": "when you move or swap sounds from the device manager (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"
       },
       {
        "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) [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 place several selected sounds from the device manager (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"
       },
       {
        "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) [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 rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [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 rename a sound with the computer tool (without asking; writes the whole bank) [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 replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [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 replace factory sounds from the device manager (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 restore a backup from the installer page, device manager or computer tool (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 restore a backup with the computer question skipped (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"
       },
       {
        "way": "when you restore factory order from the device manager (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 restore factory presets from the device manager (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 restore favourite marks from the computer (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 restore favourite marks with the computer question skipped (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"
       }
      ],
      "first_way_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": "automatically at first start [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": "automatically during use [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": "automatically, only if a matching save is left and the space for the other saved copy still contains data [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": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [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": "automatically, only if the first saved copy still contains data and either no valid matching save is left or the newest save is in the second copy [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": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [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": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [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 choose Import 0.21 sounds from the device manager (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 choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [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 choose Place all from the device manager (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 choose Undo from the device manager (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"
       },
       {
        "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) [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 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) [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 confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [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 delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 delete a sound with the computer question skipped (without asking; writes the whole bank) [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 delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [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 delete all user sounds or reset sounds to factory defaults from the device manager (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 delete selected sounds from the device manager (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 hold OCT- and OCT+ while powering on (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"
       },
       {
        "way": "when you hold SAVE for a global save (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"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [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 keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (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"
       },
       {
        "way": "when you move or swap sounds from the device manager (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"
       },
       {
        "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) [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 place several selected sounds from the device manager (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"
       },
       {
        "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) [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 rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [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 rename a sound with the computer tool (without asking; writes the whole bank) [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 replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [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 replace factory sounds from the device manager (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 restore a backup from the installer page, device manager or computer tool (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 restore a backup with the computer question skipped (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"
       },
       {
        "way": "when you restore factory order from the device manager (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 restore factory presets from the device manager (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 restore favourite marks from the computer (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 restore favourite marks with the computer question skipped (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"
       }
      ],
      "first_way_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": "automatically at first start [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": "automatically during use [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": "automatically, only if a matching save is left and the space for the other saved copy still contains data [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": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [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": "automatically, only if the first saved copy still contains data and either no valid matching save is left or the newest save is in the second copy [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": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [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": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [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 choose Import 0.21 sounds from the device manager (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 choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [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 choose Place all from the device manager (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 choose Undo from the device manager (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"
       },
       {
        "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) [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 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) [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 confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [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 delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 delete a sound with the computer question skipped (without asking; writes the whole bank) [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 delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [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 delete all user sounds or reset sounds to factory defaults from the device manager (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 delete selected sounds from the device manager (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 hold OCT- and OCT+ while powering on (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"
       },
       {
        "way": "when you hold SAVE for a global save (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"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [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 keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (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"
       },
       {
        "way": "when you move or swap sounds from the device manager (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"
       },
       {
        "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) [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 place several selected sounds from the device manager (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"
       },
       {
        "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) [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 rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [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 rename a sound with the computer tool (without asking; writes the whole bank) [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 replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [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 replace factory sounds from the device manager (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 restore a backup from the installer page, device manager or computer tool (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 restore a backup with the computer question skipped (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"
       },
       {
        "way": "when you restore factory order from the device manager (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 restore factory presets from the device manager (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 restore favourite marks from the computer (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 restore favourite marks with the computer question skipped (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"
       }
      ],
      "first_way_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": "automatically at first start [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": "automatically during use [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": "automatically, only if a matching save is left and the space for the other saved copy still contains data [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": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [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": "automatically, only if the first saved copy still contains data and either no valid matching save is left or the newest save is in the second copy [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": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [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": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [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 choose Import 0.21 sounds from the device manager (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 choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [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 choose Place all from the device manager (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 choose Undo from the device manager (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"
       },
       {
        "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) [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 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) [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 confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [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 delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 delete a sound with the computer question skipped (without asking; writes the whole bank) [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 delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [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 delete all user sounds or reset sounds to factory defaults from the device manager (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 delete selected sounds from the device manager (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 hold OCT- and OCT+ while powering on (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"
       },
       {
        "way": "when you hold SAVE for a global save (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"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [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 keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (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"
       },
       {
        "way": "when you move or swap sounds from the device manager (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"
       },
       {
        "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) [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 place several selected sounds from the device manager (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"
       },
       {
        "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) [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 rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [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 rename a sound with the computer tool (without asking; writes the whole bank) [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 replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [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 replace factory sounds from the device manager (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 restore a backup from the installer page, device manager or computer tool (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 restore a backup with the computer question skipped (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"
       },
       {
        "way": "when you restore factory order from the device manager (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 restore factory presets from the device manager (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 restore favourite marks from the computer (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 restore favourite marks with the computer question skipped (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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [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": "automatically during use [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": "automatically, only if a matching save is left and the space for the other saved copy still contains data [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": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [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": "automatically, only if the first saved copy still contains data and either no valid matching save is left or the newest save is in the second copy [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": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [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": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [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 choose Import 0.21 sounds from the device manager (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 choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [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 choose Place all from the device manager (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 choose Undo from the device manager (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"
       },
       {
        "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) [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 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) [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 confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [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 delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 delete a sound with the computer question skipped (without asking; writes the whole bank) [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 delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [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 delete all user sounds or reset sounds to factory defaults from the device manager (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 delete selected sounds from the device manager (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 hold OCT- and OCT+ while powering on (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"
       },
       {
        "way": "when you hold SAVE for a global save (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"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [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 keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (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"
       },
       {
        "way": "when you move or swap sounds from the device manager (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"
       },
       {
        "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) [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 place several selected sounds from the device manager (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"
       },
       {
        "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) [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 rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [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 rename a sound with the computer tool (without asking; writes the whole bank) [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 replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [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 replace factory sounds from the device manager (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 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) [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 restore factory presets from the device manager (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 restore favourite marks from the computer (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 restore favourite marks with the computer question skipped (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"
       },
       {
        "way": "when you send a DX7 bank (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
     },
     {
      "object": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a matching save is left and the space for the other saved copy still contains data",
        "effect": "lost"
       },
       {
        "way": "automatically, only if the first saved copy still contains data and either no valid matching save is left or the newest save is in the second copy",
        "effect": "lost"
       },
       {
        "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": "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 delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "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"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "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": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you confirm Flash Data erase 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": "lost"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "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": "lost"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "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 restore factory order from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [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": "automatically during use [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": "automatically, only if a matching save is left and the space for the other saved copy still contains data [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": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [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": "automatically, only if the first saved copy still contains data and either no valid matching save is left or the newest save is in the second copy [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": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [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": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [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 choose Import 0.21 sounds from the device manager (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 choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [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 choose Place all from the device manager (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 choose Undo from the device manager (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"
       },
       {
        "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) [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 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) [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 confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [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 delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 delete a sound with the computer question skipped (without asking; writes the whole bank) [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 delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [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 delete all user sounds or reset sounds to factory defaults from the device manager (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 delete selected sounds from the device manager (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 hold OCT- and OCT+ while powering on (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"
       },
       {
        "way": "when you hold SAVE for a global save (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"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [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 keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (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"
       },
       {
        "way": "when you move or swap sounds from the device manager (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"
       },
       {
        "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) [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 place several selected sounds from the device manager (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"
       },
       {
        "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) [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 rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [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 rename a sound with the computer tool (without asking; writes the whole bank) [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 replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [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 replace factory sounds from the device manager (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 restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup) [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 restore a backup with the computer question skipped (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"
       },
       {
        "way": "when you restore factory order from the device manager (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 restore factory presets from the device manager (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 restore favourite marks from the computer (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 restore favourite marks with the computer question skipped (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"
       }
      ],
      "first_way_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": "automatically at first start [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": "automatically during use [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": "automatically, only if a matching save is left and the space for the other saved copy still contains data [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": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data [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": "automatically, only if the first saved copy still contains data and either no valid matching save is left or the newest save is in the second copy [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": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup [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": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read [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 choose Import 0.21 sounds from the device manager (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 choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank) [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 choose Place all from the device manager (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 choose Undo from the device manager (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"
       },
       {
        "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) [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 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) [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 confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank) [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 delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 delete a sound with the computer question skipped (without asking; writes the whole bank) [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 delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank) [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 delete all user sounds or reset sounds to factory defaults from the device manager (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 delete selected sounds from the device manager (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 hold OCT- and OCT+ while powering on (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"
       },
       {
        "way": "when you hold SAVE for a global save (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"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank) [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 import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank) [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 import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank) [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 keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (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"
       },
       {
        "way": "when you move or swap sounds from the device manager (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"
       },
       {
        "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) [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 place several selected sounds from the device manager (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"
       },
       {
        "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) [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 rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank) [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 rename a sound with the computer tool (without asking; writes the whole bank) [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 replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank) [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 replace factory sounds from the device manager (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 restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup) [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 restore a backup with the computer question skipped (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"
       },
       {
        "way": "when you restore factory order from the device manager (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 restore factory presets from the device manager (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 restore favourite marks from the computer (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 restore favourite marks with the computer question skipped (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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
     },
     {
      "object": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching save is left and the space for the other saved copy still contains data",
        "effect": "lost"
       },
       {
        "way": "automatically, only if the first saved copy still contains data and either no valid matching save is left or the newest save is in the second copy",
        "effect": "lost"
       },
       {
        "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": "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 SAVE for a global save (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": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you confirm Flash Data erase 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": "lost"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "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": "lost"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "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 restore factory order from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you confirm Flash Data erase 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": "lost"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "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": "lost"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "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 restore factory order from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "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": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you confirm Flash Data erase 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": "lost"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "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": "lost"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "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 restore factory order from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "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": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you confirm Flash Data erase 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": "lost"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "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": "lost"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "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 restore factory order from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "lost"
       },
       {
        "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": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you confirm Flash Data erase 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": "lost"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "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": "lost"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "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 restore factory order from the device manager (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 17–32",
      "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"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 1–16",
      "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"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 17–32",
      "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"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 1–16",
      "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"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 17–32",
      "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"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 1–16",
      "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"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 17–32",
      "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"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 1–16",
      "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"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 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": [
     "ChoralRoot reads user presets 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 presets 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: section A (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section B (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section C (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section D (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); working loop (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); DX7 bank 6 voices 17–32; DX7 bank 7 voices 1–16; settings, calibration, song order, MIDI, theme and favourites; user presets 1–16 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it). At risk by itself, under a condition: DX7 bank 6 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. At risk when you act: 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. ChoralRoot reads user presets 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 presets 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": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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"
       },
       {
        "way": "when you upload a sample 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 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"
       },
       {
        "way": "when you upload a sample 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 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 upload a sample 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 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 upload a sample 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 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 upload a sample 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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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 presets 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"
       },
       {
        "way": "when you upload a sample 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 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"
       }
      ],
      "first_way_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 presets 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"
       },
       {
        "way": "when you upload a sample 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 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"
       }
      ],
      "first_way_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"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk by itself, under a condition: working loop. 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 (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; other writes can also erase it); user presets 17–32 (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; other writes can also erase it).",
    "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": "DX7 bank 1 voices 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": "DX7 bank 1 voices 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": "DX7 bank 2 voices 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": "DX7 bank 2 voices 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": "DX7 bank 3 voices 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": "DX7 bank 3 voices 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": "DX7 bank 4 voices 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": "DX7 bank 4 voices 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": "DX7 bank 5 voices 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": "DX7 bank 5 voices 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": "DX7 bank 6 voices 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": "DX7 bank 6 voices 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": "DX7 bank 7 voices 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": "DX7 bank 7 voices 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": "DX7 bank 8 voices 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": "DX7 bank 8 voices 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": "selected DX7 bank",
      "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": "MY KIT",
      "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 presets 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 presets 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": "settings, calibration, song order, MIDI, theme and favourites",
      "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": [
     "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: 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; settings, calibration, song order, MIDI, theme and favourites. 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, MIDI, theme and favourites",
      "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 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, MIDI, theme and favourites. 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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: section A; section B; section C; section D.",
    "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": "settings, calibration, song order, MIDI, theme and favourites",
      "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": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites.",
    "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 copy a Band groove with SAVE and a white key (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"
       },
       {
        "way": "when you install a QY70 style bank from the computer (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 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) [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 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 install a QY70 style bank from the computer (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 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) [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 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 install a QY70 style bank from the computer (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 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) [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 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 install a QY70 style bank from the computer (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 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) [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 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 install a QY70 style bank from the computer (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 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) [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 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": "DX7 bank 1 voices 1–16",
      "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": "DX7 bank 1 voices 17–32",
      "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": "DX7 bank 2 voices 1–16",
      "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": "DX7 bank 2 voices 17–32",
      "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": "DX7 bank 3 voices 1–16",
      "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": "DX7 bank 3 voices 17–32",
      "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": "DX7 bank 4 voices 1–16",
      "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": "DX7 bank 4 voices 17–32",
      "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": "DX7 bank 5 voices 1–16",
      "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": "DX7 bank 5 voices 17–32",
      "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": "DX7 bank 6 voices 1–16",
      "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": "DX7 bank 6 voices 17–32",
      "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": "DX7 bank 7 voices 1–16",
      "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": "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 QY70 style bank directly with a computer tool (without asking)",
        "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 presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use [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 choose COPY SONG (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"
       },
       {
        "way": "when you complete power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm) [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 confirm NEW SONG or FREE (asks first: press again to confirm) [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 copy a Band groove with SAVE and a white key (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"
       },
       {
        "way": "when you install a QY70 style bank from the computer (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 press SAVE (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"
       },
       {
        "way": "when you restore a backup from the computer [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 QY70 style bank directly with a 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"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (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"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (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"
       }
      ],
      "first_way_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": "automatically during use [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 choose COPY SONG (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"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm) [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 confirm NEW SONG or FREE (asks first: press again to confirm) [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 copy a Band groove with SAVE and a white key (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"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (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"
       },
       {
        "way": "when you restore a backup from the computer [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 QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (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"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
     },
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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": "DX7 bank 7 voices 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": "DX7 bank 8 voices 1–16",
      "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 voices 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": "selected DX7 bank",
      "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": "MY KIT",
      "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": [
     "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; 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; user presets 1–16 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); settings, calibration, song order, MIDI, theme and favourites. At risk when you act: DX7 bank 7 voices 17–32; DX7 bank 8 voices 1–16; DX7 bank 8 voices 17–32; selected DX7 bank; MY KIT. 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": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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": "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 confirm a sample upload in 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 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"
       },
       {
        "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": "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 confirm a sample upload in 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 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"
       },
       {
        "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": "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 confirm a sample upload in 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 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"
       },
       {
        "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": "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 confirm a sample upload in 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 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"
       },
       {
        "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": "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 confirm a sample upload in 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 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"
       },
       {
        "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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 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 confirm a sample upload in 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 upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in 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 upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in 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 upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in 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 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"
       },
       {
        "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"
       }
      ],
      "first_way_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 confirm a sample upload in 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 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"
       },
       {
        "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"
       }
      ],
      "first_way_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": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk by itself, under a condition: section A; section B; section C; section D; working loop. At risk when you act: 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 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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": "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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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 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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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 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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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 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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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": "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 a sample to the FM-1 from the 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 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"
       },
       {
        "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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 presets 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 sample to the FM-1 from the 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 (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"
       },
       {
        "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"
       }
      ],
      "first_way_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 presets 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 sample to the FM-1 from the 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 (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"
       },
       {
        "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"
       }
      ],
      "first_way_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"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: section A; section B; section C; section D; working loop; 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 (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; other writes can also erase it); user presets 17–32 (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; other writes can also erase it).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "duell",
    "name": "DUELL beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user wavetable directly with a MIDI 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"
       },
       {
        "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) [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 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 save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank) [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 save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank) [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 patch directly with a MIDI tool (without asking; writes the whole bank) [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 user wavetable directly with a MIDI 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"
       },
       {
        "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) [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"
       }
      ],
      "first_way_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 erase a user wavetable directly with a MIDI 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"
       },
       {
        "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) [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 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 save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank) [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 save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank) [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 patch directly with a MIDI tool (without asking; writes the whole bank) [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 user wavetable directly with a MIDI 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"
       },
       {
        "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) [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"
       }
      ],
      "first_way_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 erase a user wavetable directly with a MIDI 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"
       },
       {
        "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) [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 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 save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank) [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 save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank) [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 patch directly with a MIDI tool (without asking; writes the whole bank) [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 user wavetable directly with a MIDI 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"
       },
       {
        "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) [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"
       }
      ],
      "first_way_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 erase a user wavetable directly with a MIDI 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"
       },
       {
        "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) [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 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 save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank) [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 save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank) [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 patch directly with a MIDI tool (without asking; writes the whole bank) [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 user wavetable directly with a MIDI 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"
       },
       {
        "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) [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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user wavetable directly with a MIDI 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"
       },
       {
        "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 a user wavetable directly with a MIDI 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"
       },
       {
        "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) [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"
       }
      ],
      "first_way_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 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 restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "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": "DX7 bank 1 voices 17–32",
      "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 restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "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": "DX7 bank 2 voices 1–16",
      "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 restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "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": "DX7 bank 2 voices 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"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 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": "DX7 bank 3 voices 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"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 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": "DX7 bank 4 voices 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"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 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": "DX7 bank 5 voices 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"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 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": "DX7 bank 6 voices 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"
       }
      ]
     },
     {
      "object": "DX7 bank 7 voices 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 presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user wavetable directly with a MIDI 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"
       },
       {
        "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 a user wavetable directly with a MIDI 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"
       },
       {
        "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) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ],
      "first_way_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 erase a user wavetable directly with a MIDI 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"
       },
       {
        "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 a user wavetable directly with a MIDI 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"
       },
       {
        "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) [uses its saved DX7 voices]",
        "effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
       }
      ],
      "first_way_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": [
     "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: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: section A (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section B (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section C (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section D (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); working loop (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); 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; user presets 1–16 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it). 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, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: user presets 1–16.",
    "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": "settings, calibration, song order, MIDI, theme and favourites",
      "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": [],
    "owner_text": "At risk by itself, under a condition: working loop. At risk when you act: settings, calibration, song order, MIDI, theme and favourites.",
    "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 presets 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 presets 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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme 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 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"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI 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"
       },
       {
        "way": "when you upload or clear a user sample (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"
       }
      ]
     },
     {
      "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"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI 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"
       },
       {
        "way": "when you upload or clear a user sample (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"
       }
      ]
     },
     {
      "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"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI 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"
       },
       {
        "way": "when you upload or clear a user sample (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"
       }
      ]
     },
     {
      "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"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI 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"
       },
       {
        "way": "when you upload or clear a user sample (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"
       }
      ]
     },
     {
      "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 a sample directly with a MIDI 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"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (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"
       }
      ]
     },
     {
      "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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 presets 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not 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, 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not 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 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not 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, 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI 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"
       },
       {
        "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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not 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, 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you upload or clear a user sample (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"
       }
      ],
      "first_way_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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
     },
     {
      "object": "user presets 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not 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, 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not 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 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not 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, 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI 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"
       },
       {
        "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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not 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, 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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
       },
       {
        "way": "when you upload or clear a user sample (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"
       }
      ],
      "first_way_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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: section A; section B; section C; section D; working loop; 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 (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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept; other writes can also erase it); user presets 17–32 (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. Fm1-chord reads these DX7 sounds as analog sounds and drum patterns. Their DX7 voices and controls are not kept; other writes can also erase it).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "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)"
   },
   {
    "to": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: user presets 1–16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jangada",
    "name": "Jangada",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "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) [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 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 user samples to Jangada with a computer tool, without the web editor (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"
       },
       {
        "way": "when you send user samples to the FM-1 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"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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 erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (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"
       },
       {
        "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"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (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"
       },
       {
        "way": "when you send user samples to the FM-1 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"
       }
      ]
     },
     {
      "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 erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (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"
       },
       {
        "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"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (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"
       },
       {
        "way": "when you send user samples to the FM-1 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"
       }
      ]
     },
     {
      "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 erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (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"
       },
       {
        "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"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (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"
       },
       {
        "way": "when you send user samples to the FM-1 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"
       }
      ]
     },
     {
      "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 erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (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"
       },
       {
        "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"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (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"
       },
       {
        "way": "when you send user samples to the FM-1 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"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "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": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "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 presets 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. sloopDX 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 erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (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"
       },
       {
        "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. sloopDX 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. sloopDX 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 samples to Jangada with a computer tool, without the web editor (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"
       },
       {
        "way": "when you send user samples to the FM-1 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 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. sloopDX 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. sloopDX 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"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX 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 presets 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. sloopDX 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 erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (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"
       },
       {
        "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. sloopDX 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. sloopDX 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 samples to Jangada with a computer tool, without the web editor (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"
       },
       {
        "way": "when you send user samples to the FM-1 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 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. sloopDX 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. sloopDX 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"
       }
      ],
      "first_way_effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX 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"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "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 (changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX 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; other writes can also erase it); user presets 17–32 (changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. sloopDX 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; other writes can also erase it).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ACS",
    "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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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": "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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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": "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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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": "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"
       },
       {
        "way": "when you send a sample to the FM-1 from the 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": "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 a sample to the FM-1 from the 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 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"
       },
       {
        "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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": "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 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 presets 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 sample to the FM-1 from the 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 (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"
       },
       {
        "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"
       }
      ],
      "first_way_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 presets 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 sample to the FM-1 from the 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 (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"
       },
       {
        "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"
       }
      ],
      "first_way_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"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: section A; section D; settings, calibration, song order, MIDI, theme and favourites. At risk by itself, under a condition: section B; section C. At risk when you act: working loop; 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 (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; other writes can also erase it); user presets 17–32 (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; other writes can also erase it).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "orbit",
    "name": "ORBIT",
    "flags": "ACS",
    "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": "when you erase a sample with a MIDI 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"
       },
       {
        "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 or restore a sample with a MIDI 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"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit 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"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "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 settings 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 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 settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts",
        "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 settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (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 settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and 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 settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you press SAVE on the SONG screen (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 settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "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": "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": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI 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"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (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 a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI 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"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit 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"
       }
      ]
     },
     {
      "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": "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": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI 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"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (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 a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI 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"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit 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"
       }
      ]
     },
     {
      "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": "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": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI 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"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (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 a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI 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"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit 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"
       }
      ]
     },
     {
      "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": "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": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI 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"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (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 a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI 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"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit 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"
       }
      ]
     },
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "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": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "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 presets 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 sample with a MIDI 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"
       },
       {
        "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 or restore a sample with a MIDI 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"
       },
       {
        "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"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit 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"
       }
      ],
      "first_way_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 presets 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 sample with a MIDI 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"
       },
       {
        "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 or restore a sample with a MIDI 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"
       },
       {
        "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"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit 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"
       }
      ],
      "first_way_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"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, MIDI, theme and favourites. At risk by itself, under a condition: section A; section B; section C; section D. At risk when you act: 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 (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; other writes can also erase it); user presets 17–32 (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; other writes can also erase it).",
    "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"
       },
       {
        "way": "when you send a sample from the 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": "changed to the new format: Saving settings removes sloopDX’s light options, learned MIDI controls, theme and favourites from that copy. The shared calibration and song order still load",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Saving settings removes sloopDX’s light options, learned MIDI controls, theme and favourites from that copy. The shared calibration and song order still load"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s light options, learned MIDI controls, theme and favourites from that copy. The shared calibration and song order still load"
       },
       {
        "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 light options, learned MIDI controls, theme and favourites from that copy. The shared calibration and song order still load"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s light options, learned MIDI controls, theme and favourites from that copy. The shared calibration and song order still load"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s light options, learned MIDI controls, theme and favourites from that copy. The shared calibration and song order still load"
       }
      ]
     },
     {
      "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"
       },
       {
        "way": "when you send a sample from the 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 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"
       },
       {
        "way": "when you send a sample from the 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 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"
       },
       {
        "way": "when you send a sample from the 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 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"
       },
       {
        "way": "when you send a sample from the 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 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": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "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": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "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 presets 1–16",
      "effect": "partly lost (only that slot)",
      "ways": [
       {
        "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 (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a sample from the 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": "partly lost (only that slot)",
      "ways": [
       {
        "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 (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a sample from the 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 Floyd FM 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 Floyd FM 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 (changed to the new format: Saving settings removes sloopDX’s light options, learned MIDI controls, theme and favourites from that copy. The shared calibration and song order still load). 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 (partly lost (only that slot)); user presets 17–32 (partly lost (only that slot)). SLOOP Floyd FM 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 Floyd FM 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)"
   },
   {
    "to": "winampfm",
    "name": "winampFM Synth",
    "flags": "ACSK",
    "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, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (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"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (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"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI 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"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI 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 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 settings 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 settings 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 settings this firmware cannot use can be lost at the next settings save"
       },
       {
        "way": "when you record the current music into the selected song section (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 settings 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 settings 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": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (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"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (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"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI 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"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI 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": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (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"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (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"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI 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"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI 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": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (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"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (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"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI 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"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI 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": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (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"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (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"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you store section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI 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"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI 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 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": "DX7 bank 1 voices 17–32",
      "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": "DX7 bank 2 voices 1–16",
      "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": "DX7 bank 2 voices 17–32",
      "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": "DX7 bank 3 voices 1–16",
      "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": "DX7 bank 3 voices 17–32",
      "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": "DX7 bank 4 voices 1–16",
      "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": "DX7 bank 4 voices 17–32",
      "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": "DX7 bank 5 voices 1–16",
      "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": "DX7 bank 5 voices 17–32",
      "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": "DX7 bank 6 voices 1–16",
      "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": "DX7 bank 6 voices 17–32",
      "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": "DX7 bank 7 voices 1–16",
      "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": "DX7 bank 7 voices 17–32",
      "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": "DX7 bank 8 voices 1–16",
      "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": "DX7 bank 8 voices 17–32",
      "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": "selected DX7 bank",
      "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": "MY KIT",
      "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 presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (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"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (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"
       },
       {
        "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)"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI 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"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI 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"
       }
      ],
      "first_way_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 hold REC in IMPORTER to erase USR1 (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"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (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"
       },
       {
        "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)"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI 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"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI 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"
       }
      ],
      "first_way_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": [
     "winampFM Synth keeps stored but does not show user presets 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "winampFM Synth keeps stored but does not show user presets 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, MIDI, theme and favourites. At risk by itself, under a condition: section A; section B; section C; section D. At risk when you act: 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 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it). winampFM Synth keeps stored but does not show user presets 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. winampFM Synth keeps stored but does not show user presets 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "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 a new recording finishes and playback is stopped [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": "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) [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 a take from the control page or 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": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped [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": "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) [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 a take from the control page or 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": "automatically at first start [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": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped [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": "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) [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 a take from the control page or 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"
       }
      ],
      "first_way_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": "automatically at first start [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": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped [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": "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) [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 a take from the control page or 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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start [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": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped [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": "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) [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 a take from the control page or 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"
       }
      ],
      "first_way_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": "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": "DX7 bank 1 voices 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"
       },
       {
        "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": "DX7 bank 2 voices 1–16",
      "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": "DX7 bank 2 voices 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"
       },
       {
        "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": "DX7 bank 3 voices 1–16",
      "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": "DX7 bank 3 voices 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"
       },
       {
        "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": "DX7 bank 4 voices 1–16",
      "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": "DX7 bank 4 voices 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"
       },
       {
        "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": "DX7 bank 5 voices 1–16",
      "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": "DX7 bank 5 voices 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"
       },
       {
        "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": "DX7 bank 6 voices 1–16",
      "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": "DX7 bank 6 voices 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"
       },
       {
        "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": "DX7 bank 7 voices 1–16",
      "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": "DX7 bank 7 voices 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"
       },
       {
        "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": "DX7 bank 8 voices 1–16",
      "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": "DX7 bank 8 voices 17–32",
      "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": "user presets 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 a new recording finishes and playback is stopped [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": "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 [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 copy to another pattern (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"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (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"
       },
       {
        "way": "when you save song and scenes (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"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or 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"
       },
       {
        "way": "when you upload a take from the control page or 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": "automatically at first start [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": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when a new recording finishes and playback is stopped [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": "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 [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 copy to another pattern (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"
       },
       {
        "way": "when you save a pattern or Save As (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"
       },
       {
        "way": "when you save song and scenes (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"
       },
       {
        "way": "when you send a sound or DX7 bank from the control page or 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"
       },
       {
        "way": "when you upload a take from the control page or 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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
     },
     {
      "object": "selected DX7 bank",
      "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 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": "MY KIT",
      "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 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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: section A; section B; section C (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section D (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); working loop (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); 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; user presets 1–16; user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it). At risk by itself, under a condition: selected DX7 bank; MY KIT.",
    "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, MIDI, theme and favourites",
      "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"
       },
       {
        "way": "when you send samples to the FM-1 from the 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 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"
       },
       {
        "way": "when you send samples to the FM-1 from the 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 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"
       },
       {
        "way": "when you send samples to the FM-1 from the 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 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"
       },
       {
        "way": "when you send samples to the FM-1 from the 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 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": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "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": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "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 presets 1–16",
      "effect": "partly lost (only that slot)",
      "ways": [
       {
        "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 (only that slot)"
       },
       {
        "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 send samples to the FM-1 from the 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 store the current 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": "partly lost (only that slot)",
      "ways": [
       {
        "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 (only that slot)"
       },
       {
        "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 send samples to the FM-1 from the 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 store the current 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": "working loop",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you send samples to the FM-1 from the 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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Salt keeps sloopDX’s user presets 1–16 and user presets 17–32 but cannot show or play them. Their slots look empty. Back up both banks before using them. Saving directly into one replaces that preset; saving into another slot keeps it unchanged. The panel waits for a second turn to save. The editor does not ask before overwriting a slot that looks empty."
    ],
    "owner_text": "At risk by itself: 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 (partly lost (only that slot)); user presets 17–32 (partly lost (only that slot)); working loop (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay). Salt keeps sloopDX’s user presets 1–16 and user presets 17–32 but cannot show or play them. Their slots look empty. Back up both banks before using them. Saving directly into one replaces that preset; saving into another slot keeps it unchanged. The panel waits for a second turn to save. The editor does not ask before overwriting a slot that looks empty.",
    "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": "settings, calibration, song order, MIDI, theme and favourites",
      "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": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [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 erase a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase the PIGEON bank with the bank 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"
       },
       {
        "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"
       },
       {
        "way": "when you send a PIGEON bank from the 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 send a PIGEON bank with the bank 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"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you upload a PIGEON bank with the library 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"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the 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 a sample in USR2 in the older format from the 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"
       }
      ],
      "first_way_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": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [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 erase a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase the PIGEON bank with the bank 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"
       },
       {
        "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"
       },
       {
        "way": "when you send a PIGEON bank from the 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 send a PIGEON bank with the bank 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"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you upload a PIGEON bank with the library 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"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the 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 a sample in USR2 in the older format from the 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"
       }
      ],
      "first_way_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": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [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 erase a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase the PIGEON bank with the bank 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"
       },
       {
        "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"
       },
       {
        "way": "when you send a PIGEON bank from the 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 send a PIGEON bank with the bank 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"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you upload a PIGEON bank with the library 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"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the 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 a sample in USR2 in the older format from the 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"
       }
      ],
      "first_way_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": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [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 erase a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase the PIGEON bank with the bank 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"
       },
       {
        "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"
       },
       {
        "way": "when you send a PIGEON bank from the 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 send a PIGEON bank with the bank 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"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you upload a PIGEON bank with the library 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"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the 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 a sample in USR2 in the older format from the 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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
     },
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [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 erase a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase the PIGEON bank with the bank 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"
       },
       {
        "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 a PIGEON bank from the 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 send a PIGEON bank with the bank 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"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you upload a PIGEON bank with the library 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"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the 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 a sample in USR2 in the older format from the 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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay"
     },
     {
      "object": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits",
        "effect": "lost"
       },
       {
        "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 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 USR1 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 USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [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 erase a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase the PIGEON bank with the bank 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"
       },
       {
        "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 a PIGEON bank from the 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 PIGEON bank with the bank 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"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you upload a PIGEON bank with the library 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"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the 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 upload a sample in USR2 in the older format from the 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"
       }
      ],
      "first_way_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": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits [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 erase a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you erase the PIGEON bank with the bank 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"
       },
       {
        "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 a PIGEON bank from the 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 PIGEON bank with the bank 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"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you send a sample in USR2 in the older format directly with a MIDI 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"
       },
       {
        "way": "when you upload a PIGEON bank with the library 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"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the 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 upload a sample in USR2 in the older format from the 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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
     },
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 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": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 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 USR1 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 USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 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 USR1 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 USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 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 USR1 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 USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 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 USR1 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 USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 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 USR1 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 USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 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 USR1 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 USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 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 USR1 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 USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 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 USR1 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 USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "DX7 bank 6 voices 1–16",
      "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 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": "DX7 bank 6 voices 17–32",
      "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 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": "DX7 bank 7 voices 1–16",
      "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 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": "DX7 bank 7 voices 17–32",
      "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 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": "DX7 bank 8 voices 1–16",
      "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 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": "DX7 bank 8 voices 17–32",
      "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 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": "selected DX7 bank",
      "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 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": "MY KIT",
      "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 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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "PIGEON keeps stored but does not show user presets 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 presets 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: settings, calibration, song order, MIDI, theme and favourites. At risk by itself, under a condition: section A (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section B (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section C (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section D (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); working loop (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); DX7 bank 5 voices 17–32; user presets 1–16 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it). At risk when you act: 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 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. PIGEON keeps stored but does not show user presets 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 presets 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": "SK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "DX7 bank 1 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 5 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 5 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 6 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 6 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 7 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 7 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 8 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "DX7 bank 8 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "selected DX7 bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "MY KIT",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly 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 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": "settings, calibration, song order, MIDI, theme and favourites",
      "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": "section A",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI 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"
       },
       {
        "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 directly with a MIDI 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"
       },
       {
        "way": "when you upload a sample from the device page (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"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI 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"
       },
       {
        "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 directly with a MIDI 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"
       },
       {
        "way": "when you upload a sample from the device page (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"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI 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"
       },
       {
        "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 directly with a MIDI 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"
       },
       {
        "way": "when you upload a sample from the device page (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"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI 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"
       },
       {
        "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 directly with a MIDI 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"
       },
       {
        "way": "when you upload a sample from the device page (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"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI 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"
       },
       {
        "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 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) [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 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 (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you upload a sample from the device page (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"
       }
      ],
      "first_way_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 erase a sample directly with a MIDI 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"
       },
       {
        "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 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) [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 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 (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you upload a sample from the device page (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"
       }
      ],
      "first_way_effect": "sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay"
     },
     {
      "object": "working loop",
      "effect": "sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI 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"
       },
       {
        "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 directly with a MIDI 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"
       },
       {
        "way": "when you upload a sample from the device page (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"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Move keeps stored but does not show user presets 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
     "FM1 Move keeps stored but does not show user presets 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play."
    ],
    "owner_text": "At risk when you act: 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; settings, calibration, song order, MIDI, theme and favourites; section A (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay); section B (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay); section C (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay); section D (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay); user presets 1–16 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); working loop (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay). FM1 Move keeps stored but does not show user presets 1–16 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play. FM1 Move keeps stored but does not show user presets 17–32 until you write over the saved data. Newer sounds are kept but not shown. Only older version-1 sounds still in the bank can play.",
    "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"
       },
       {
        "way": "when you erase a sample with computer commands (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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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"
       },
       {
        "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 from the 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 send a sample with computer commands (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 saved MIDI controls, theme and favourites. Quest can read sloopDX’s saved playing options as game preferences or progress"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls, theme and favourites. Quest can read sloopDX’s saved playing options as game preferences or progress"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls, theme and favourites. Quest can read sloopDX’s saved playing options as game preferences or progress"
       },
       {
        "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: Saving settings removes sloopDX’s saved MIDI controls, theme and favourites. Quest can read sloopDX’s saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls, theme and favourites. Quest can read sloopDX’s saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls, theme and favourites. Quest can read sloopDX’s saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "changed to the new format: Saving settings removes sloopDX’s saved MIDI controls, theme and favourites. Quest can read sloopDX’s saved playing options as game preferences or progress"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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"
       },
       {
        "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 a sample from the 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 send a sample with computer commands (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"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_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 erase a sample with computer commands (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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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"
       },
       {
        "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 a sample from the 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 send a sample with computer commands (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"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_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 erase a sample with computer commands (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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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"
       },
       {
        "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 a sample from the 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 send a sample with computer commands (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"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_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 erase a sample with computer commands (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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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"
       },
       {
        "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 a sample from the 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 send a sample with computer commands (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"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ],
      "first_way_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 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 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": "DX7 bank 1 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 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": "DX7 bank 2 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 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": "DX7 bank 2 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 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": "DX7 bank 3 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 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": "DX7 bank 3 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 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": "DX7 bank 4 voices 1–16",
      "effect": "lost",
      "ways": [
       {
        "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 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": "DX7 bank 4 voices 17–32",
      "effect": "lost",
      "ways": [
       {
        "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 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": "DX7 bank 5 voices 1–16",
      "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 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": "DX7 bank 5 voices 17–32",
      "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 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": "DX7 bank 6 voices 1–16",
      "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 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": "DX7 bank 6 voices 17–32",
      "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 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": "DX7 bank 7 voices 1–16",
      "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 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": "DX7 bank 7 voices 17–32",
      "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 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": "DX7 bank 8 voices 1–16",
      "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 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": "DX7 bank 8 voices 17–32",
      "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 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": "selected DX7 bank",
      "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"
       }
      ]
     },
     {
      "object": "MY KIT",
      "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"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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"
       },
       {
        "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 (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a sample from the 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 sample with computer commands (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"
       },
       {
        "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 send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ],
      "first_way_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 erase a sample with computer commands (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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (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"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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"
       },
       {
        "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 (without asking; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a sample from the 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 sample with computer commands (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"
       },
       {
        "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 send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ],
      "first_way_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": [
     "FM1 Quest 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.",
     "FM1 Quest 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 (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section B (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section C (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); section D (sounds can change if their saved DX7 voices, chosen bank or drum kit are replaced; saved notes and controls stay; other writes can also erase it); 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 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it); user presets 17–32 (sounds can change if their saved DX7 voices or chosen bank are replaced; saved notes and controls stay; other writes can also erase it). FM1 Quest 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. FM1 Quest 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)"
   },
   {
    "to": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "settings, calibration, song order, MIDI, theme and favourites",
     "section A",
     "section B",
     "section C",
     "section D",
     "user presets 1–16",
     "user presets 17–32",
     "working loop",
     "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"
    ],
    "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, MIDI, theme and favourites; section A; section B; section C; section D; user presets 1–16; user presets 17–32; working loop; 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. 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)"
   }
  ]
 },
 "saving_note": {
  "working_loop": "Autosave needs changed loop data, stopped transport, no armed recording or take, no open menu, quiet voices, 2.5 seconds without input and at least 20 seconds since the previous attempt; power-off itself does not save.",
  "sections": "SAVE plus white keys 5–8 captures a section immediately in memory, confirms only over a readable occupied section, then writes after playback stops, voices are quiet and input has been idle for 1.5 seconds; the SECTION page saves immediately while stopped after two right turns.",
  "settings": "Closing HOME’s menu saves changed device settings and favourites immediately while stopped, or queues them during playback. MIDI LEARN, REC MODE/START, SYNC, OUT and IN NOTES/CLOCK changes also schedule a write; HOME’s LEARN CLEAR does too when there are learned mappings to remove. Scheduled writes wait until stopped, quiet and idle for 1.5 seconds, with at least 5 seconds between attempts. CH1–CH4, OTHER, BEND and MIDI 3 edits revert at power-off; IN set to a channel comes back as CLOCK.",
  "voice": "The working-loop autosave does not store edited DX7 bank bytes or MY KIT; use bank SAVE and SAVE KIT, or a backup that captures their active in-memory contents.",
  "reset": "FACTORY RESET erases both flash copies of each managed object and reboots without undo; erase failures are not displayed, sections A–D survive in retained memory and are rewritten after restart once stopped and quiet, and the working-loop autosave later resumes.",
  "source": [
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "669-725",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L669-L725"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "1132-1216",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1132-L1216"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui_menu.c",
    "lines": "233-242",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L233-L242"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui_voice.c",
    "lines": "326-338",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L326-L338"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui_studio.c",
    "lines": "488-508",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L488-L508"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/storage.c",
    "lines": "232-242",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/storage.c#L232-L242"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "983-994",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L983-L994"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "851-862",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "875-912",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "1194-1214",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/main.c",
    "lines": "172-180",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/editor.c",
    "lines": "506-525",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/editor.c#L506-L525"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "1150-1178",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1150-L1178"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "782-806",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L782-L806"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui.c",
    "lines": "595-605",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L595-L605"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/main.c",
    "lines": "373-381",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L373-L381"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "151",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L151"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "1150-1164",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1150-L1164"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/project.c",
    "lines": "1210-1214",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1210-L1214"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/app.ld",
    "lines": "35-37",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/app.ld#L35-L37"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/hal/fm1_sys.h",
    "lines": "134-141",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/hal/fm1_sys.h#L134-L141"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui.c",
    "lines": "790-797",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L790-L797"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui.c",
    "lines": "831-853",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L831-L853"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui_input.c",
    "lines": "854-881",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L854-L881"
   },
   {
    "kind": "source",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "firmware/src/ui_menu.c",
    "lines": "310-313",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L310-L313"
   }
  ],
  "midi_fault": "CH1–CH4, OTHER, BEND, FX CH, DR MAP, REMOTE and CLK OUT edits revert at power-off; the backup holds their previously stored values, and IN set to a channel comes back as CLOCK and ignores incoming notes.",
  "before_update": "Before update mode, store edited DX7 banks, use SAVE KIT for MY KIT and close HOME’s menu while stopped to commit favourites; update entry does not perform those saves, and unsaved edits disappear at the next start."
 },
 "disagreements": [
  {
   "topic": "SELECT on ordinary pages",
   "docs_say": "The 4.0 overview says SELECT moves through a page family.",
   "source_says": "The helper for that exists but is never called; SELECT sets tempo outside the menu, SONG and DX7 lists.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "README.md",
    "lines": "77-78",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L77-L78"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "295-319",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L295-L319"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1107-1110",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1107-L1110"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "527-530",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L527-L530"
    }
   ]
  },
  {
   "topic": "Quick envelope knob direction",
   "docs_say": "The quick-voice guide describes rightward ATK, DEC and REL turns as making their times shorter.",
   "source_says": "Positive offsets reduce operator rates, making the corresponding stages slower or longer.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "SLOOP.md",
    "lines": "375-377",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/SLOOP.md#L375-L377"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "273-315",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L273-L315"
    }
   ]
  },
  {
   "topic": "Voice edits during held notes",
   "docs_say": "The voice guide says existing notes retain their earlier settings.",
   "source_says": "The edit generation participates in the active-voice signature and sounding voices follow the updated patch.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "SLOOP.md",
    "lines": "358",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/SLOOP.md#L358"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "178-191",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L178-L191"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "326-334",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L326-L334"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "393-425",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L393-L425"
    }
   ]
  },
  {
   "topic": "Scope of a full backup",
   "docs_say": "The Projects overview describes its backup as containing everything on the unit.",
   "source_says": "It exports only the active DX bank, omits the other seven banks, selected-bank metadata and favourites, and restores only objects actually present.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "README.md",
    "lines": "300-309",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L300-L309"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/editor.c",
     "lines": "362-407",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/editor.c#L362-L407"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/editor.c",
     "lines": "412-525",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/editor.c#L412-L525"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "607-632",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L607-L632"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "web/editor.html",
     "lines": "1463-1481",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/web/editor.html#L1463-L1481"
    }
   ]
  },
  {
   "topic": "Returning to SLOOP",
   "docs_say": "The return instructions suggest that choosing replacement sounds is the expected consequence.",
   "source_says": "Current SLOOP and sloopDX project payloads have different layouts despite shared slots and legacy magic names; their current project formats are not imported in either direction, so the working loop can later be autosaved over.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "README.md",
    "lines": "191-194",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L191-L194"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "24-110",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L24-L110"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "427-454",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L427-L454"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "690-704",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L690-L704"
    }
   ]
  },
  {
   "topic": "Voice numbering and factory count",
   "docs_say": "One bank-playing instruction still puts U01 at 18 and U32 at 49.",
   "source_says": "There are twenty factory voices and active-bank voices occupy 21–52.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "SLOOP.md",
    "lines": "386-405",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/SLOOP.md#L386-L405"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "456-490",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L456-L490"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/core.h",
     "lines": "23-31",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/core.h#L23-L31"
    }
   ]
  },
  {
   "topic": "Number of banks and punch effects",
   "docs_say": "The specifications still mention one saved bank and sixteen punch-in effects.",
   "source_says": "The code has eight banks and twenty-seven key-addressed effects.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "README.md",
    "lines": "358-359",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L358-L359"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/storage.c",
     "lines": "17-30",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/storage.c#L17-L30"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "750-779",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L750-L779"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/punch.c",
     "lines": "12-21",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/punch.c#L12-L21"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "1573-1582",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L1573-L1582"
    }
   ]
  },
  {
   "topic": "Recording QUANT dial",
   "docs_say": "The 4.0 notes say the REC QUANT option was omitted.",
   "source_says": "The screen still draws QUANT but only three recording knobs have handlers; KNOB 4 can edit the underlying page instead, and the old preference bit has no recording-timing effect.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "README.md",
    "lines": "80",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L80"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "762-791",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L762-L791"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "850-881",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L850-L881"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1033-1051",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1033-L1051"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "1111-1129",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L1111-L1129"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "362-363",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L362-L363"
    }
   ]
  },
  {
   "topic": "Turning the second core back on",
   "docs_say": "The menu table says enabling the second core requires another power-on.",
   "source_says": "It can resume immediately if the core is still available; otherwise a power-on is required.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "README.md",
    "lines": "251",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L251"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_menu.c",
     "lines": "287-291",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L287-L291"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/cpu1.c",
     "lines": "18-28",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/cpu1.c#L18-L28"
    }
   ]
  },
  {
   "topic": "A complete factory reset",
   "docs_say": "The menu guide promises a return to a freshly installed state.",
   "source_says": "The reset erases managed flash and reboots while retaining sections A–D in memory; startup marks them dirty and the quiet flush writes them again.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "README.md",
    "lines": "254",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L254"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_menu.c",
     "lines": "28-35",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_menu.c#L28-L35"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "151",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L151"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "983-994",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L983-L994"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "1150-1164",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1150-L1164"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/hal/fm1_sys.h",
     "lines": "134-141",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/hal/fm1_sys.h#L134-L141"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "1210-1214",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1210-L1214"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/main.c",
     "lines": "373-381",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L373-L381"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/app.ld",
     "lines": "35-37",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/app.ld#L35-L37"
    }
   ],
   "evidence": "read-in-source",
   "why": "The section array is in the retained noinit region, which startup does not clear; missing flash copies mark valid cached sections dirty."
  },
  {
   "topic": "MIDI settings after power-off",
   "docs_say": "The overview promises persistent per-track MIDI settings and includes them in backups.",
   "source_says": "CH1–CH4, OTHER, BEND, FX CH, DR MAP, REMOTE and CLK OUT edits revert at power-off; the backup holds their previously stored values, and IN set to a channel comes back as CLOCK and ignores incoming notes.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "README.md",
    "lines": "66",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L66"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "851-862",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L851-L862"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "875-912",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L875-L912"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "1194-1214",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/main.c",
     "lines": "172-180",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/main.c#L172-L180"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/editor.c",
     "lines": "506-525",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/editor.c#L506-L525"
    }
   ],
   "evidence": "read-in-source"
  },
  {
   "topic": "Install preservation across firmwares",
   "docs_say": "The installation overview promises that saved work remains available.",
   "source_says": "Current SLOOP projects are rejected; a default working loop can autosave about 20 seconds after first start, inherited IN channel settings can be rewritten when quiet, and occupied update staging is cleared at boot without a question.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "README.md",
    "lines": "184",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/README.md#L184"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "690-718",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L690-L718"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/project.c",
     "lines": "1194-1214",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/project.c#L1194-L1214"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ota.c",
     "lines": "396-410",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ota.c#L396-L410"
    }
   ],
   "evidence": "read-in-source"
  },
  {
   "topic": "Saving MY KIT from drum views",
   "docs_say": "The drum-view overview gives SAVE twice as its kit-save gesture.",
   "source_says": "That gesture stores MY KIT immediately from KIT or LANE after the repeat confirmation, with no kit undo; on GRID, SAVE opens SONG instead.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "SLOOP.md",
    "lines": "313",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/SLOOP.md#L313"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_studio.c",
     "lines": "488-508",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_studio.c#L488-L508"
    }
   ],
   "evidence": "read-in-source"
  },
  {
   "topic": "Holding REC on SONG",
   "docs_say": "The track-clear instructions give a REC hold without a page exception.",
   "source_says": "The SONG screen intercepts REC for section storage, so holding it there does not arm track clearing.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "SLOOP.md",
    "lines": "249",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/SLOOP.md#L249"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_input.c",
     "lines": "886-895",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_input.c#L886-L895"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_song.c",
     "lines": "104-132",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_song.c#L104-L132"
    }
   ],
   "evidence": "read-in-source"
  },
  {
   "topic": "EDIT overview and page memory",
   "docs_say": "The guide presents the VOICE and SHAPE macro pages as the result of tapping EDIT.",
   "source_says": "The first EDIT page is the DX7 list, with macro pages available through More Pages; subsequent returns recall the last EDIT page.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "SLOOP.md",
    "lines": "314",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/SLOOP.md#L314"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "411-415",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L411-L415"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/eng_dx7.c",
     "lines": "480-490",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/eng_dx7.c#L480-L490"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "274-290",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L274-L290"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui_voice.c",
     "lines": "380-387",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui_voice.c#L380-L387"
    }
   ],
   "evidence": "read-in-source"
  },
  {
   "topic": "Name of the saved-section page",
   "docs_say": "The guide calls the page PROJECT in its save instructions.",
   "source_says": "The SAVE family calls that page SECTION.",
   "docs_ref": {
    "kind": "doc",
    "repo": "zvenson/dxsloop",
    "ref": "4.0",
    "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
    "path": "SLOOP.md",
    "lines": "250",
    "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/SLOOP.md#L250"
   },
   "source_ref": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/params.c",
     "lines": "427-430",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/params.c#L427-L430"
    }
   ],
   "evidence": "read-in-source"
  }
 ],
 "not_mapped": [
  "The hardware colour and separate second PLAY LED were not established; the code drives one matrix light for PLAY.",
  "The reset-confirmation window counts input-handler calls, so its wall-clock duration is not established; repeat OCT+ before the warning clears.",
  "The browser’s planned LIVE page, song-file workflow and theme designer are not panel pages; implemented backup, bank and kit writes are covered by the storage fragment.",
  "Third-party installers and the closed stock/Baud Girl storage formats were not executed or fully established here.",
  "No behavior was measured on an FM-1; read-in-source means static inspection at the pinned commit."
 ],
 "delta": {
  "parent": "SLOOP v2.7.1",
  "parent_map": "control-maps/sloop.json",
  "parent_commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
  "fork_point": "SLOOP 2.3 (d691ba7)",
  "entries_carried_unchanged": 386,
  "entries_changed": 227,
  "entries_new": 806,
  "entries_dropped": 100,
  "modes_carried": 37,
  "modes_new": 48,
  "modes_dropped": 2
 },
 "delta_note": "Entries count controls plus lights; unchanged compares mode, gesture, action and short_label, excluding citations. The read-only scratch delta-ledger.json is the initial canary lineage; delta_refresh_changes records status changes through round 2, appended entries are new, and current counts include these fixes. Retained mode ids count as carried even when their descriptions were corrected.",
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 MIDI persistence fault",
   "fixed": "Corrected saving, backup and all affected panel entries; documented power-off reversion, IN channel becoming CLOCK, and the automatic settings rewrite, with a README disagreement.",
   "at": "saving_note; switching_note; controls.encoder_knob1–4 MIDI entries; disagreements; storage settings/backup/startup"
  },
  {
   "round": 1,
   "error": "2 Update flush scope",
   "fixed": "Replaced the promise that all work is saved with the exact flush scope and explicit instructions to store banks, MY KIT and favourites beforehand.",
   "at": "controls.button_oct_down[9]; modes[35]; saving_note.before_update; storage update triggers"
  },
  {
   "round": 1,
   "error": "3 Automatic foreign-data overwrite",
   "fixed": "Added first-start autosave timing, IN-collapse settings writes, cleanup, later-save and bank-store risks with affected firmware names; stated the SLOOP two-autosave loss chain and backup-before-first-start precaution.",
   "at": "switching_note; disagreements; storage startup/foreign rows; md Before you switch firmware"
  },
  {
   "round": 1,
   "error": "4 Factory reset retains sections",
   "fixed": "Stated retained-memory survival and subsequent rewrite as source behavior; removed the unsupported 1.5-second confirmation promise from map and storage triggers.",
   "at": "controls.button_oct_up[9]; modes[32]; saving_note.reset; disagreements[9]; not_mapped[1]; storage reset rows"
  },
  {
   "round": 1,
   "error": "5 PRESETS SAVE scope",
   "fixed": "Restricted the existing browsing entry to SAVE PRESETS; USER, SECTION and TOOLS do not browse sounds.",
   "at": "controls.encoder_presets[1]; md SAVE tables"
  },
  {
   "round": 1,
   "error": "6 EDIT pattern lights",
   "fixed": "Made bright keys depend on NOTES and appended a dim-pattern-light entry.",
   "at": "lights.key_lights[4] and appended entry"
  },
  {
   "round": 1,
   "error": "MINOR sample: song recording and step refusal",
   "fixed": "Added REC IS ON to LOOP/SONG and the song-playback edit refusal to every white step key.",
   "at": "controls.key_d5[9]; key_f3[7], key_g3[7], key_a3[7], key_b3[7], key_c4[7], key_d4[7], key_e4[7], key_f4[7], key_g4[7], key_a4[7], key_b4[7], key_c5[7], key_d5[7], key_e5[7], key_f5[7], key_g5[7]"
  },
  {
   "round": 1,
   "error": "MINOR sample: DR MAP, CH1 and master filter evidence",
   "fixed": "Specified DR MAP as incoming-only and added implementation citations for channel collision handling and master-filter direction.",
   "at": "controls.encoder_knob2[46]; controls.encoder_knob1[46] and other MIDI channel knobs; controls.encoder_knob3[41]"
  },
  {
   "round": 1,
   "error": "MINOR delta: QNT name",
   "fixed": "Used the on-screen QNT name for SEL quantisation and corrected black step-key conditions.",
   "at": "controls.encoder_knob3[34]; key_fs3[9], key_gs3[8], key_as3[8], key_cs4[8], key_ds4[7], key_fs4[7], key_gs4[7], key_as4[7], key_cs5[7], key_ds5[7], key_fs5[7]"
  },
  {
   "round": 1,
   "error": "MINOR modes: page memory, stopped saves and SONG exceptions",
   "fixed": "Corrected SEQ page recall, USER save/erase gating, SONG OCT- gating, REC/clear exclusions and shipped USB SERIAL availability.",
   "at": "modes[5,8,16,17,20,31]; controls.button_rec[5]"
  },
  {
   "round": 1,
   "error": "5 PRESETS guide scope follow-through",
   "fixed": "Moved the browsing row into SAVE PRESETS and appended no-action entries for USER, SECTION and TOOLS.",
   "at": "controls.encoder_presets appended entries; md SAVE pages and SAVE PRESETS"
  },
  {
   "round": 1,
   "error": "MINOR coverage: A4 light",
   "fixed": "Appended A4’s dim backlight behavior; key_lights describes shared sounding-note and layer indications.",
   "at": "lights.led_a4[0]"
  },
  {
   "round": 1,
   "error": "MINOR coverage: Program Change",
   "fixed": "Added incoming Program Change behavior and appended its screen indication.",
   "at": "midi_notes[0]; controls.screen appended entry"
  },
  {
   "round": 1,
   "error": "MINOR coverage: drum-view routes",
   "fixed": "Added EDIT from other pages and selection of drums from the DX7 list as routes to drum view.",
   "at": "modes[11]; controls.button_edit[0]"
  },
  {
   "round": 1,
   "error": "MINOR licence citation",
   "fixed": "Added the actual Apache-2.0 attribution lines.",
   "at": "licence_source"
  },
  {
   "round": 1,
   "error": "MINOR missed disagreements: SLOOP guide",
   "fixed": "Recorded the GRID SAVE exception and SONG REC-hold exception against the guide.",
   "at": "disagreements appended SLOOP.md:313 and :249"
  },
  {
   "round": 1,
   "error": "MINOR fragment: restored-loop hash",
   "fixed": "Replaced the false hash-clearing claim with checksum-difference behavior.",
   "at": "storage objects.autosave.written_when restored project"
  },
  {
   "round": 1,
   "error": "MINOR coverage: SLOOP backup refusal",
   "fixed": "Stated that the current SLOOP backup is rejected during browser validation before any write.",
   "at": "switching_note.sloop_warning; storage.backup.sloop_2_7_1"
  },
  {
   "round": 1,
   "error": "MINOR registry: drifting default branch",
   "fixed": "Kept the required source-selector enum and added an immutable mapped commit and pinned document URL.",
   "at": "registry.sources"
  },
  {
   "round": 1,
   "error": "MINOR reset confirmation duration",
   "fixed": "Removed the unverified 1.5-second window and used repeat-before-warning-clears wording; documented 90 input polls without a wall-clock promise.",
   "at": "controls.button_oct_up[9]; modes[32]; not_mapped[1]; storage reset triggers"
  },
  {
   "round": 1,
   "error": "MINOR delta bookkeeping after fixes",
   "fixed": "Recomputed the canary counts from original parent identity without changing entry positions or the scratch ledger.",
   "at": "delta; delta_refresh_changes; delta_note"
  },
  {
   "round": 2,
   "error": "2 Duplicate MIDI parameter warnings",
   "fixed": "Put the drum-channel power-off/backup warning on DRUMS as well as CH4, and the channel-to-CLOCK warning on SYSTEM as well as MIDI 2.",
   "at": "controls.encoder_knob1[45]; controls.encoder_knob4[44]; controls.encoder_knob3[42]; controls.encoder_knob1[47]; matching md rows"
  },
  {
   "round": 2,
   "error": "3 Foreign settings contain saved music",
   "fixed": "Named AMB-1’s eight pieces, OberVave’s 32 programs and Polly’s channel sounds, and explained the first HOME-menu-close write and OberVave’s single-copy loss.",
   "at": "switching_note.settings_overwrite; md Before you switch firmware; storage settings menu-close trigger and AMB-1/OberVave/Polly foreign rows"
  },
  {
   "round": 2,
   "error": "1 MIDI LEARN write trigger",
   "fixed": "Corrected the fragment’s false dependency on another save and named MIDI LEARN/CLEAR, REC MODE/START and IN NOTES/CLOCK in the quiet-save overview.",
   "at": "saving_note.settings; storage objects[0].written_when[1]; md Saving and replacing work"
  },
  {
   "round": 2,
   "error": "4 Melodee range and Polly styles",
   "fixed": "Narrowed section-save overlap to U325-U384 and included Polly’s optional QY70 styles in preset-save risks.",
   "at": "switching_note.later_saves; md Before you switch firmware; storage Melodee and Polly foreign rows"
  },
  {
   "round": 2,
   "error": "5 Backup MIDI scope",
   "fixed": "Distinguished included learned CCs and SYNC/OUT/IN NOTES-CLOCK from excluded channel, OTHER/BEND and MIDI 3 panel edits.",
   "at": "switching_note.back_up_first; storage.backup.holds; md Before you switch firmware"
  },
  {
   "round": 2,
   "error": "6 EDIT recalls its last page",
   "fixed": "Qualified the DX7/drum-view route by EDIT-family page memory and explained DRUM TRACK on recalled quick pages.",
   "at": "controls.button_edit[0]; modes[11]; matching md rows and descriptions"
  },
  {
   "round": 2,
   "error": "7 Intended guide disagreements",
   "fixed": "Added the EDIT overview and PROJECT-versus-SECTION disagreements at the corrected guide lines, retaining the real earlier disagreements.",
   "at": "disagreements appended SLOOP.md:314 and :250; md disagreements"
  },
  {
   "round": 2,
   "error": "8 Guide table layout",
   "fixed": "Moved the dim EDIT pattern lights and A4 backlight into the lights table, placed Program Change and its screen response in a MIDI table, and supplied the screen sentence’s subject.",
   "at": "lights.key_lights[7] and lights.led_a4[0] md rows; controls.screen[71]; midi_notes md table"
  },
  {
   "round": 3,
   "error": "1 Settings summary location and omissions",
   "fixed": "Located LEARN CLEAR in HOME’s menu, retained its independent quiet-save trigger, and named OTHER and BEND among settings that revert at power-off.",
   "at": "saving_note.settings; md Saving and replacing work"
  },
  {
   "round": 3,
   "error": "2 All settings writes hide SLOOP SYN kits",
   "fixed": "Stated that any sloopDX settings write leaves SLOOP 2.7.1 on default SYN1–SYN4 kits, beyond the inherited IN-channel case; the storage fragment already describes this behavior correctly.",
   "at": "switching_note.settings_overwrite; md Before you switch firmware"
  }
 ],
 "midi_notes": [
  {
   "topic": "Program Change",
   "action": "Incoming Program Change uses zero-based sound numbers without favourites: factory voices occupy 0–19, a readable active DX7 bank adds 20–51, and saved user presets follow whichever entries exist; the addressed drum track selects a kit, out-of-range choices are ignored, IN set to a channel targets the selected track only, and CLOCK rejects Program Change.",
   "evidence": "read-in-source",
   "source": [
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "684-716",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L684-L716"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/seq.c",
     "lines": "2650-2697",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/seq.c#L2650-L2697"
    },
    {
     "kind": "source",
     "repo": "zvenson/dxsloop",
     "ref": "4.0",
     "commit": "a439f1de928c4c2c8e60d48ea79b09831102ecc7",
     "path": "firmware/src/ui.c",
     "lines": "484-518",
     "url": "https://github.com/zvenson/dxsloop/blob/a439f1de928c4c2c8e60d48ea79b09831102ecc7/firmware/src/ui.c#L484-L518"
    }
   ]
  }
 ],
 "delta_refresh_changes": [
  {
   "at": "controls.button_oct_down[9]",
   "parent_entry": "controls.button_oct_down[10]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_f3[7]",
   "parent_entry": "controls.key_f3[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_fs3[9]",
   "parent_entry": "controls.key_fs3[10]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_g3[7]",
   "parent_entry": "controls.key_g3[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_gs3[8]",
   "parent_entry": "controls.key_gs3[9]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_a3[7]",
   "parent_entry": "controls.key_a3[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_as3[8]",
   "parent_entry": "controls.key_as3[9]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_b3[7]",
   "parent_entry": "controls.key_b3[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_c4[7]",
   "parent_entry": "controls.key_c4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_cs4[8]",
   "parent_entry": "controls.key_cs4[9]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_d4[7]",
   "parent_entry": "controls.key_d4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_ds4[7]",
   "parent_entry": "controls.key_ds4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_e4[7]",
   "parent_entry": "controls.key_e4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_f4[7]",
   "parent_entry": "controls.key_f4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_fs4[7]",
   "parent_entry": "controls.key_fs4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_g4[7]",
   "parent_entry": "controls.key_g4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_gs4[7]",
   "parent_entry": "controls.key_gs4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_a4[7]",
   "parent_entry": "controls.key_a4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_as4[7]",
   "parent_entry": "controls.key_as4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_b4[7]",
   "parent_entry": "controls.key_b4[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_c5[7]",
   "parent_entry": "controls.key_c5[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_cs5[7]",
   "parent_entry": "controls.key_cs5[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_d5[7]",
   "parent_entry": "controls.key_d5[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_d5[9]",
   "parent_entry": "controls.key_d5[9]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_ds5[7]",
   "parent_entry": "controls.key_ds5[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_e5[7]",
   "parent_entry": "controls.key_e5[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_f5[7]",
   "parent_entry": "controls.key_f5[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_fs5[7]",
   "parent_entry": "controls.key_fs5[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "controls.key_g5[7]",
   "parent_entry": "controls.key_g5[7]",
   "before": "carried_unchanged",
   "after": "changed"
  },
  {
   "at": "lights.key_lights[4]",
   "parent_entry": "lights.key_lights[4]",
   "before": "carried_unchanged",
   "after": "changed"
  }
 ],
 "checker_disputes_refresh": []
}