{
 "modes": [
  {
   "id": "synth_play",
   "name": "Play a synth",
   "how_to_get_there": "Select a synth with ALGORITHM with CHORD and key mapping OFF and no percussion override.",
   "what_it_is": "The keys play the selected synth.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1027-1049",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
    }
   ]
  },
  {
   "id": "chord_mode",
   "name": "Play chords",
   "how_to_get_there": "Set SCL > CHORD above OFF.",
   "what_it_is": "White keys play scale chords and black keys are silent.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "102-180",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L180"
    }
   ]
  },
  {
   "id": "drum_play",
   "name": "Play drums",
   "how_to_get_there": "Select the drum hero with ALGORITHM.",
   "what_it_is": "Keys trigger the drum kit.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1012-1025",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
    }
   ]
  },
  {
   "id": "tracks",
   "name": "Adventure home",
   "how_to_get_there": "Tap HOME from a page.",
   "what_it_is": "Village, party and boss views share the performance controls.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1009-1014",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1009-L1014"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_screens.c",
     "lines": "396-402",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L396-L402"
    }
   ]
  },
  {
   "id": "visualiser",
   "name": "Visualizer",
   "how_to_get_there": "Hold HOME, choose VISUALIZER with PRESETS and press OCT+.",
   "what_it_is": "Five music-reactive views.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "360-367",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L360-L367"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "757-760",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L757-L760"
    }
   ]
  },
  {
   "id": "pages",
   "name": "Parameter pages",
   "how_to_get_there": "Tap a function button; repeat to cycle its pages.",
   "what_it_is": "Four columns give KNOB 1–4 their jobs; SELECT remains tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "278-308",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L278-L308"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "step_page",
   "name": "STEP",
   "how_to_get_there": "Tap SEQ on a synth until STEP appears.",
   "what_it_is": "Note entry writes the step under the cursor.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "303",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L303"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "558-591",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
    }
   ]
  },
  {
   "id": "save_pages",
   "name": "SAVE pages",
   "how_to_get_there": "Tap SAVE from a parameter page.",
   "what_it_is": "PRESETS, USER, PROJECT and TOOLS.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "297-300",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L297-L300"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "650-658",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L650-L658"
    }
   ]
  },
  {
   "id": "save_presets",
   "name": "PRESETS",
   "how_to_get_there": "Tap SAVE until PRESETS appears.",
   "what_it_is": "Browse factory and user sounds.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "297",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L297"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "472-480",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L472-L480"
    }
   ]
  },
  {
   "id": "save_user",
   "name": "USER",
   "how_to_get_there": "Tap SAVE until USER appears.",
   "what_it_is": "Choose, load, erase or replace one of 32 user sounds.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "298",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L298"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "482-499",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L482-L499"
    }
   ]
  },
  {
   "id": "save_project",
   "name": "PROJECT",
   "how_to_get_there": "Tap SAVE until PROJECT appears.",
   "what_it_is": "Four saved projects are the song’s sections A–D.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "299",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L299"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_song.c",
     "lines": "2-3",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L2-L3"
    }
   ]
  },
  {
   "id": "save_tools",
   "name": "TOOLS",
   "how_to_get_there": "Tap SAVE until TOOLS appears.",
   "what_it_is": "Clear a pattern, initialize a sound or start a new working project.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "300",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L300"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "528-552",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L528-L552"
    }
   ]
  },
  {
   "id": "drums_grid",
   "name": "DRUMS grid",
   "how_to_get_there": "With drums selected on home, tap EDIT or SEQ; tap again if KIT appears.",
   "what_it_is": "Edit one drum lane at the cursor.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "621-630",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L621-L630"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_studio.c",
     "lines": "451-468",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L451-L468"
    }
   ]
  },
  {
   "id": "drums_kit",
   "name": "DRUMS kit",
   "how_to_get_there": "Tap EDIT or SEQ on the drum grid.",
   "what_it_is": "Choose a kit and change its mix.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "623-626",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L623-L626"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_studio.c",
     "lines": "469-474",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L469-L474"
    }
   ]
  },
  {
   "id": "song_screen",
   "name": "Song order",
   "how_to_get_there": "Tap SEQ until SONG, tap SAVE on home or DRUMS, or hold SAVE and press white key 16.",
   "what_it_is": "Edit up to sixteen section-and-bar entries.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "650-656",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L650-L656"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "301-303",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L301-L303"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_song.c",
     "lines": "68-84",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L68-L84"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "303-305",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L303-L305"
    }
   ]
  },
  {
   "id": "stopped",
   "name": "Stopped",
   "how_to_get_there": "Stop playback with PLAY.",
   "what_it_is": "The loop is stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1289-1309",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1289-L1309"
    }
   ]
  },
  {
   "id": "playing",
   "name": "Playing",
   "how_to_get_there": "Tap PLAY or start an armed take.",
   "what_it_is": "The loop or song runs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1267-1277",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1267-L1277"
    }
   ]
  },
  {
   "id": "song_mode",
   "name": "Song playback",
   "how_to_get_there": "On the song screen while stopped, press OCT− to enable song mode.",
   "what_it_is": "Playback follows saved sections and returns to the working loop when stopped.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_song.c",
     "lines": "37-45",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L37-L45"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1267-1309",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1267-L1309"
    }
   ]
  },
  {
   "id": "rec_ready",
   "name": "Recording ready",
   "how_to_get_there": "Press REC while stopped.",
   "what_it_is": "An armed take waits for its note or PLAY; MODE and START are retained settings.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_studio.c",
     "lines": "122-140",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L122-L140"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "777-806",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L777-L806"
    }
   ]
  },
  {
   "id": "count_in",
   "name": "Count-in",
   "how_to_get_there": "Set START to count, then press PLAY while armed.",
   "what_it_is": "Four metronome beats precede recording.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1582-1607",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1582-L1607"
    }
   ]
  },
  {
   "id": "free_take",
   "name": "Free take",
   "how_to_get_there": "In an empty project, arm FREE mode and play a note.",
   "what_it_is": "REC closes a fitted loop; PLAY drops it.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "473-575",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L473-L575"
    }
   ]
  },
  {
   "id": "hold_clear",
   "name": "Clear-track hold",
   "how_to_get_there": "Keep REC down beyond 0.7 s.",
   "what_it_is": "The completed ring clears the selected track; release early to cancel.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "843-872",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L843-L872"
    }
   ]
  },
  {
   "id": "layer_fx",
   "name": "FX held",
   "how_to_get_there": "Hold FX.",
   "what_it_is": "White keys apply temporary mix effects.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "969-975",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "331-338",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L331-L338"
    }
   ]
  },
  {
   "id": "layer_erase",
   "name": "EDIT held",
   "how_to_get_there": "Hold EDIT.",
   "what_it_is": "Keys erase notes or drum lanes; knobs transform the pattern.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "984-1008",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "339-346",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L339-L346"
    }
   ]
  },
  {
   "id": "layer_roll",
   "name": "ARP held",
   "how_to_get_there": "Hold ARP.",
   "what_it_is": "Keys repeat notes or drum sounds at the roll rate.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1016-1037",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1037"
    }
   ]
  },
  {
   "id": "layer_steps",
   "name": "SEQ held",
   "how_to_get_there": "Hold SEQ.",
   "what_it_is": "White keys enter or remove steps and the first four black keys choose a page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "237-245",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
    }
   ]
  },
  {
   "id": "layer_steps_held",
   "name": "SEQ with steps held",
   "how_to_get_there": "Hold SEQ and a white key.",
   "what_it_is": "Knobs change its pitch or sound, level and ratchet; KNOB 4 still changes track length.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "351-372",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L351-L372"
    }
   ]
  },
  {
   "id": "layer_key",
   "name": "SEL held",
   "how_to_get_there": "Hold SEL.",
   "what_it_is": "Keys set the root for all synth tracks; knobs set chord, scale, key mapping and transpose.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "247-252",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "374-388",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L374-L388"
    }
   ]
  },
  {
   "id": "layer_mix",
   "name": "GLO held",
   "how_to_get_there": "Hold GLO.",
   "what_it_is": "First four white keys mute tracks and the final white key taps tempo; knobs set track levels.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "306-311",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L311"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "390-393",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L390-L393"
    }
   ]
  },
  {
   "id": "layer_song",
   "name": "SAVE held",
   "how_to_get_there": "Hold SAVE.",
   "what_it_is": "Load or store sections, switch song mode, record the order or open its editor.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_layers.c",
     "lines": "254-304",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
    }
   ]
  },
  {
   "id": "layer_locked",
   "name": "Locked layer",
   "how_to_get_there": "While holding a layer button, tap HOME.",
   "what_it_is": "Keeps the layer active after releasing its button.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "665-717",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L665-L717"
    }
   ]
  },
  {
   "id": "menu",
   "name": "HOME menu",
   "how_to_get_there": "Hold HOME for 0.7 s.",
   "what_it_is": "PRESETS selects a menu item and OCT+ or SEL opens or changes it.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "5-6",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L5-L6"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "389-468",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L468"
    }
   ]
  },
  {
   "id": "about",
   "name": "About",
   "how_to_get_there": "Open ABOUT in the HOME menu.",
   "what_it_is": "Memory information or credits.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_screens.c",
     "lines": "1118-1170",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L1118-L1170"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "270-276",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L270-L276"
    }
   ]
  },
  {
   "id": "usb_rescue",
   "name": "USB rescue",
   "how_to_get_there": "Power on with OCT− held, or after two failed starts.",
   "what_it_is": "Audio is off while the installer can reconnect.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/recovery.c",
     "lines": "41-70",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/recovery.c#L41-L70"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/bootguard.h",
     "lines": "27-30",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/bootguard.h#L27-L30"
    }
   ]
  },
  {
   "id": "update_countdown",
   "name": "Update countdown",
   "how_to_get_there": "Hold both octave buttons while stopped for more than 2 s.",
   "what_it_is": "Counts down toward update mode at 5 s; outside menus a selected synth’s effects have already reset at 0.8 s, and entering update mode saves that reset.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/main.c",
     "lines": "242-269",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/main.c#L242-L269"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "820-832",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L820-L832"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/project.c",
     "lines": "676-685",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L676-L685"
    }
   ]
  },
  {
   "id": "village",
   "name": "Village view",
   "how_to_get_there": "On adventure home, tap HOME until the village appears.",
   "what_it_is": "The first home scene, with the same performance knobs.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_screens.c",
     "lines": "396-402",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L396-L402"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_town.c",
     "lines": "667-686",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_town.c#L667-L686"
    }
   ]
  },
  {
   "id": "party_view",
   "name": "Party adventure view",
   "how_to_get_there": "Tap HOME again from the village.",
   "what_it_is": "The walking party and track activity.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_screens.c",
     "lines": "396-402",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L396-L402"
    }
   ]
  },
  {
   "id": "boss_view",
   "name": "Boss view",
   "how_to_get_there": "Tap HOME again from the party view.",
   "what_it_is": "Boss action follows the music; the first visit queues a settings save even without SAVE.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_screens.c",
     "lines": "396-402",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L396-L402"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_screens.c",
     "lines": "296-298",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L296-L298"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_boss.c",
     "lines": "139-142",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L139-L142"
    }
   ]
  },
  {
   "id": "live_record",
   "name": "Recording camp",
   "how_to_get_there": "Start recording while the loop plays.",
   "what_it_is": "A campfire, recording eyes and the track activity list.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_screens.c",
     "lines": "378-402",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L378-L402"
    }
   ]
  },
  {
   "id": "party_menu",
   "name": "Party cards",
   "how_to_get_there": "Open PARTY in the HOME menu.",
   "what_it_is": "Choose a hero and its available class appearance.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "369-387",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L369-L387"
    }
   ]
  },
  {
   "id": "status",
   "name": "Hero status",
   "how_to_get_there": "Open STATUS in the HOME menu.",
   "what_it_is": "The selected hero’s status sheet.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_screens.c",
     "lines": "1048-1080",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L1048-L1080"
    }
   ]
  },
  {
   "id": "led_menu",
   "name": "Keyboard LED",
   "how_to_get_there": "Open KEYBOARD LED in the HOME menu.",
   "what_it_is": "Six effects with speed, fade and repeat settings.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "299-311",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L299-L311"
    }
   ]
  },
  {
   "id": "filter_menu",
   "name": "Screen filter",
   "how_to_get_there": "Open FILTER in the HOME menu.",
   "what_it_is": "Preview one of twelve scene palettes and keep it with SEL or OCT+.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "283-297",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L283-L297"
    }
   ]
  },
  {
   "id": "importer",
   "name": "Imported files",
   "how_to_get_there": "Open IMPORTER in the HOME menu.",
   "what_it_is": "Three samples and twelve training songs, each erasable.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "28-95",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L28-L95"
    }
   ]
  },
  {
   "id": "sound_picker",
   "name": "Sound picker",
   "how_to_get_there": "Hold PLAY for 0.7 s outside a layer or recording preparation.",
   "what_it_is": "Browse and hear sounds for a hero before copying one.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "915-936",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L915-L936"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "313-358",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L358"
    }
   ]
  },
  {
   "id": "game_choice",
   "name": "Choose a game",
   "how_to_get_there": "Open GAMES in the HOME menu.",
   "what_it_is": "Piano Hero or FM Hero.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "434-437",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L434-L437"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "946-965",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L946-L965"
    }
   ]
  },
  {
   "id": "game_song",
   "name": "Choose a training song",
   "how_to_get_there": "Confirm the game with SEL, OCT+ or PLAY.",
   "what_it_is": "Six song slots and an add-file card for each game.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "946-965",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L946-L965"
    }
   ]
  },
  {
   "id": "piano_game",
   "name": "Piano Hero play",
   "how_to_get_there": "Select a populated Piano Hero song and confirm.",
   "what_it_is": "Play matching note names while the chart waits for you.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "828-844",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "868-910",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L868-L910"
    }
   ]
  },
  {
   "id": "fm_game",
   "name": "FM Hero play",
   "how_to_get_there": "Select a populated FM Hero song and confirm.",
   "what_it_is": "Four key lanes follow a moving chart.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "828-844",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "868-910",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L868-L910"
    }
   ]
  },
  {
   "id": "game_result",
   "name": "Game result",
   "how_to_get_there": "Finish a training song.",
   "what_it_is": "Score and hit results with retry or song selection.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "906-910",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L906-L910"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "946-965",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L946-L965"
    }
   ]
  },
  {
   "id": "game_import_help",
   "name": "Add a training song",
   "how_to_get_there": "Confirm the add-file card in song selection.",
   "what_it_is": "USB upload guidance; no file is written by that confirmation.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "960-963",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L960-L963"
    }
   ]
  },
  {
   "id": "unlock_banner",
   "name": "Unlock notice",
   "how_to_get_there": "Appears after the first boss unlock.",
   "what_it_is": "HOME dismisses the notice; otherwise it expires.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_boss.c",
     "lines": "571-578",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L571-L578"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "941-942",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L941-L942"
    }
   ]
  },
  {
   "id": "ultimate",
   "name": "Ultimate animation",
   "how_to_get_there": "Music charges and triggers a hero’s ultimate.",
   "what_it_is": "A timed side-window or full-screen animation that cannot be skipped.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_boss.c",
     "lines": "630-655",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L630-L655"
    }
   ]
  },
  {
   "id": "lowcut",
   "name": "LOWCUT",
   "how_to_get_there": "Highlight LOWCUT in the HOME menu.",
   "what_it_is": "The selected HOME menu setting.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "393-398",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L393-L398"
    }
   ]
  },
  {
   "id": "usb_audio",
   "name": "USB AUDIO",
   "how_to_get_there": "Highlight USB AUDIO in the HOME menu.",
   "what_it_is": "The selected HOME menu setting.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "400-402",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L400-L402"
    }
   ]
  },
  {
   "id": "boot_sound",
   "name": "BOOT SOUND",
   "how_to_get_there": "Highlight BOOT SOUND in the HOME menu.",
   "what_it_is": "The selected HOME menu setting.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "404-406",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L404-L406"
    }
   ]
  },
  {
   "id": "ult_option",
   "name": "ULT ANIMATION",
   "how_to_get_there": "Highlight ULT ANIMATION in the HOME menu.",
   "what_it_is": "The selected HOME menu setting.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "408-414",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L408-L414"
    }
   ]
  },
  {
   "id": "enemies",
   "name": "MAP ENEMIES",
   "how_to_get_there": "Highlight MAP ENEMIES in the HOME menu.",
   "what_it_is": "The selected HOME menu setting.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "416-420",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L416-L420"
    }
   ]
  },
  {
   "id": "damage",
   "name": "DAMAGE NUMBERS",
   "how_to_get_there": "Highlight DAMAGE NUMBERS in the HOME menu.",
   "what_it_is": "The selected HOME menu setting.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "422-424",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L422-L424"
    }
   ]
  },
  {
   "id": "boss_speed",
   "name": "BOSS SPEED",
   "how_to_get_there": "Highlight BOSS SPEED in the HOME menu.",
   "what_it_is": "The selected HOME menu setting.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "416-420",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L416-L420"
    }
   ]
  },
  {
   "id": "page_env",
   "name": "ENV",
   "how_to_get_there": "Tap ENV until ENV appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "279",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L279"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_env_dest",
   "name": "ENV DEST",
   "how_to_get_there": "Tap ENV until ENV DEST appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "280",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L280"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_lfo_dest",
   "name": "LFO DEST",
   "how_to_get_there": "Tap LFO until LFO DEST appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "281",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L281"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_lfo",
   "name": "LFO",
   "how_to_get_there": "Tap LFO until LFO appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "282",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L282"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_fx",
   "name": "FX",
   "how_to_get_there": "Tap FX until FX appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "283",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L283"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_slicer",
   "name": "SLICER",
   "how_to_get_there": "Tap FX until SLICER appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "284",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L284"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_dly",
   "name": "DLY",
   "how_to_get_there": "Tap FX until DLY appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "285",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L285"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_rev_cho",
   "name": "REV/CHO",
   "how_to_get_there": "Tap FX until REV/CHO appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "286",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L286"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_scl",
   "name": "SCL",
   "how_to_get_there": "Tap SEL until SCL appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "287",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L287"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_scl_2",
   "name": "SCL 2",
   "how_to_get_there": "Tap SEL until SCL 2 appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "288",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L288"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_edit_1",
   "name": "EDIT 1",
   "how_to_get_there": "Tap EDIT until EDIT 1 appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_edit_2",
   "name": "EDIT 2",
   "how_to_get_there": "Tap EDIT until EDIT 2 appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_voice",
   "name": "VOICE",
   "how_to_get_there": "Tap EDIT until VOICE appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "291",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L291"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_voice_2",
   "name": "VOICE 2",
   "how_to_get_there": "Tap EDIT until VOICE 2 appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "292",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L292"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_global",
   "name": "GLOBAL",
   "how_to_get_there": "Tap GLO until GLOBAL appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "293",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L293"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_master",
   "name": "MASTER",
   "how_to_get_there": "Tap GLO until MASTER appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "294",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L294"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_system",
   "name": "SYSTEM",
   "how_to_get_there": "Tap GLO until SYSTEM appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "295",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L295"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_arp",
   "name": "ARP",
   "how_to_get_there": "Tap ARP until ARP appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "301",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L301"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_arp_2",
   "name": "ARP 2",
   "how_to_get_there": "Tap ARP until ARP 2 appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "302",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L302"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "page_pattern",
   "name": "PATTERN",
   "how_to_get_there": "Tap SEQ until PATTERN appears.",
   "what_it_is": "Four parameter columns; SELECT keeps setting tempo.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "304",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L304"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "1068-1087",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1087"
    }
   ]
  },
  {
   "id": "edit_analog_1",
   "name": "ANALOG EDIT 1",
   "how_to_get_there": "Select a ANALOG sound and tap EDIT until EDIT 1.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_analog.c",
     "lines": "120-134",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L120-L134"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    }
   ]
  },
  {
   "id": "edit_analog_2",
   "name": "ANALOG EDIT 2",
   "how_to_get_there": "Select a ANALOG sound and tap EDIT until EDIT 2.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_analog.c",
     "lines": "120-134",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L120-L134"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    }
   ]
  },
  {
   "id": "edit_digital_1",
   "name": "DIGITAL EDIT 1",
   "how_to_get_there": "Select a DIGITAL sound and tap EDIT until EDIT 1.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_digital.c",
     "lines": "135-149",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L135-L149"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    }
   ]
  },
  {
   "id": "edit_digital_2",
   "name": "DIGITAL EDIT 2",
   "how_to_get_there": "Select a DIGITAL sound and tap EDIT until EDIT 2.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_digital.c",
     "lines": "135-149",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L135-L149"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    }
   ]
  },
  {
   "id": "edit_phase_1",
   "name": "PHASE EDIT 1",
   "how_to_get_there": "Select a PHASE sound and tap EDIT until EDIT 1.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_phase.c",
     "lines": "181-195",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L181-L195"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    }
   ]
  },
  {
   "id": "edit_phase_2",
   "name": "PHASE EDIT 2",
   "how_to_get_there": "Select a PHASE sound and tap EDIT until EDIT 2.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_phase.c",
     "lines": "181-195",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L181-L195"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    }
   ]
  },
  {
   "id": "edit_lofi_1",
   "name": "LOFI EDIT 1",
   "how_to_get_there": "Select a LOFI sound and tap EDIT until EDIT 1.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_lofi.c",
     "lines": "212-226",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L212-L226"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    }
   ]
  },
  {
   "id": "edit_lofi_2",
   "name": "LOFI EDIT 2",
   "how_to_get_there": "Select a LOFI sound and tap EDIT until EDIT 2.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_lofi.c",
     "lines": "212-226",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L212-L226"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    }
   ]
  },
  {
   "id": "edit_sample_1",
   "name": "SAMPLE EDIT 1",
   "how_to_get_there": "Select a SAMPLE sound and tap EDIT until EDIT 1.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_sample.c",
     "lines": "235-249",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L235-L249"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    }
   ]
  },
  {
   "id": "edit_sample_2",
   "name": "SAMPLE EDIT 2",
   "how_to_get_there": "Select a SAMPLE sound and tap EDIT until EDIT 2.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_sample.c",
     "lines": "235-249",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L235-L249"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    }
   ]
  },
  {
   "id": "edit_voice_1",
   "name": "VOICE EDIT 1",
   "how_to_get_there": "Select a VOICE sound and tap EDIT until EDIT 1.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_formant.c",
     "lines": "222-236",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L222-L236"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    }
   ]
  },
  {
   "id": "edit_voice_2",
   "name": "VOICE EDIT 2",
   "how_to_get_there": "Select a VOICE sound and tap EDIT until EDIT 2.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_formant.c",
     "lines": "222-236",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L222-L236"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    }
   ]
  },
  {
   "id": "edit_trio_1",
   "name": "TRIO EDIT 1",
   "how_to_get_there": "Select a TRIO sound and tap EDIT until EDIT 1.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_trio.c",
     "lines": "373-387",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L373-L387"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    }
   ]
  },
  {
   "id": "edit_trio_2",
   "name": "TRIO EDIT 2",
   "how_to_get_there": "Select a TRIO sound and tap EDIT until EDIT 2.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_trio.c",
     "lines": "373-387",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L373-L387"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    }
   ]
  },
  {
   "id": "edit_wheel_1",
   "name": "WHEEL EDIT 1",
   "how_to_get_there": "Select a WHEEL sound and tap EDIT until EDIT 1.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_drawbar.c",
     "lines": "279-293",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L279-L293"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    }
   ]
  },
  {
   "id": "edit_wheel_2",
   "name": "WHEEL EDIT 2",
   "how_to_get_there": "Select a WHEEL sound and tap EDIT until EDIT 2.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_drawbar.c",
     "lines": "279-293",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L279-L293"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    }
   ]
  },
  {
   "id": "edit_grain_1",
   "name": "GRAIN EDIT 1",
   "how_to_get_there": "Select a GRAIN sound and tap EDIT until EDIT 1.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_grain.c",
     "lines": "431-445",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L431-L445"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "289",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
    }
   ]
  },
  {
   "id": "edit_grain_2",
   "name": "GRAIN EDIT 2",
   "how_to_get_there": "Select a GRAIN sound and tap EDIT until EDIT 2.",
   "what_it_is": "The four engine parameters for this page.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_grain.c",
     "lines": "431-445",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L431-L445"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "290",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
    }
   ]
  },
  {
   "id": "snap_keys",
   "name": "Scale-snap keys",
   "how_to_get_there": "Set SCL > QNT to SNAP with CHORD OFF.",
   "what_it_is": "Every key rounds down to a pitch in the scale.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "115-120",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
    }
   ]
  },
  {
   "id": "white_keys",
   "name": "White-key scale",
   "how_to_get_there": "Set SCL > QNT to WHITE with CHORD OFF.",
   "what_it_is": "White keys walk scale degrees from C4 as root; black keys are silent.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "122-146",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
    }
   ]
  },
  {
   "id": "sample_kit_keys",
   "name": "SAMPLE kit keys",
   "how_to_get_there": "Choose the SAMPLE engine’s GM kit set.",
   "what_it_is": "Chromatic keys start at drum note C2 rather than F3.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "108-110",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
    }
   ]
  },
  {
   "id": "support_perc",
   "name": "Support percussion",
   "how_to_get_there": "In synth 3’s sound picker, copy a BRASIL percussion choice.",
   "what_it_is": "The selected percussion sound responds on every active note; this assignment is not saved with projects or user sounds.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "119-162",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L119-L162"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/voice.c",
     "lines": "373-375",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/project.c",
     "lines": "27-41",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L27-L41"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/upreset.c",
     "lines": "22-32",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/upreset.c#L22-L32"
    }
   ]
  },
  {
   "id": "page_drum_rack",
   "name": "Drum Rack (GLO > DRUMS)",
   "how_to_get_there": "Tap GLO until Drum Rack appears.",
   "what_it_is": "Sets the drum MIDI input assignment and USB MIDI output channel, drum level and drum reverb; at 0 drum key hits still send on channel 10 and the fourth knob has no job.",
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/params.c",
     "lines": "293-296",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L293-L296"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_stock.c",
     "lines": "35-38",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L35-L38"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "56-60",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L56-L60"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1021-1024",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1021-L1024"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1092-1096",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1096"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/usb.c",
     "lines": "122-133",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/usb.c#L122-L133"
    }
   ]
  }
 ],
 "controls": {
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A short tap starts or stops all four tracks on release; inside a layer it acts on press.",
    "short_label": "PLAY/STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "915-936",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L915-L936"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-991",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L991"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1022-1031",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1022-L1031"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1023-1030",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1023-L1030"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1267-1277",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1267-L1277"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1582-1607",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1582-L1607"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1582-1584",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1582-L1584"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "559-575",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L559-L575"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "31-34",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L31-L34"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Does nothing in the menu list.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "962-966",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L962-L966"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L468"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Hold 0.7 s outside menus, layers and recording preparation to open the sound picker without changing playback.",
    "short_label": "SOUND PICKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "915-936",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L915-L936"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Restarts the highlighted sound’s preview phrase, temporarily soloing the hero and pausing a running loop.",
    "short_label": "HEAR AGAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "313-320",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L320"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "137-153",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L137-L153"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "press",
    "action": "Starts or stops the loop while the visualizer remains open.",
    "short_label": "PLAY / STOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "242",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L242"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "press",
    "action": "Opens the song list for the chosen game.",
    "short_label": "CHOOSE GAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "960-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L960-L965"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "press",
    "action": "Starts the selected populated song, or shows upload guidance on the add-file card.",
    "short_label": "START SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "960-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L960-L965"
     }
    ]
   },
   {
    "mode": "game_result",
    "gesture": "press",
    "action": "Does nothing on the result screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L249"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "122-140",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L122-L140"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "396-404",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L396-L404"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "130-140",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L130-L140"
     }
    ]
   },
   {
    "mode": "song_mode",
    "gesture": "press",
    "action": "While the song plays it refuses (STOP THE SONG FIRST); when stopped, arming switches back to loop mode.",
    "short_label": "REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "126-140",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L126-L140"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "press",
    "action": "Closes a free take into a fitted 1, 2 or 4 bar loop on a sixteenth-note grid; only 192 note events fit, later notes are omitted, and a take closes itself after 24 s.",
    "short_label": "CLOSE LOOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "403-404",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L403-L404"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "482-490",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L482-L490"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "504-549",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L504-L549"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "559-573",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L559-L573"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "press",
    "action": "Cancels the count-in and disarms.",
    "short_label": "CANCEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "130-134",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L130-L134"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1605-1607",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1605-L1607"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Hold about 2 s to clear the selected track’s notes and latched arp notes after a ring starts at 0.7 s; early release cancels the clear, and one-level undo can restore the pattern and length.",
    "short_label": "CLEAR TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "809-874",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L809-L874"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "218-235",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L218-L235"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "135-158",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L135-L158"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "While stopped, saves the working loop into the cursor entry’s section and saves settings immediately, with a second REC within 3 s required only for a used section and no undo.",
    "short_label": "STORE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "37-65",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L37-L65"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "310-325",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L310-L325"
     }
    ]
   },
   {
    "mode": "importer",
    "gesture": "long_press",
    "action": "Hold REC for 1.3 s to erase the selected stored sample or training song immediately without another question or undo; releasing early cancels.",
    "short_label": "ERASE FILE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "62-95",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L62-L95"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/editor.c",
      "lines": "87-99",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/editor.c#L87-L99"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/editor.c",
      "lines": "131-141",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/editor.c#L131-L141"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Returns from a page or the drum or song screen to the adventure view.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1009-1015",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1009-L1015"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "198-209",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L198-L209"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "417-420",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L417-L420"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "25",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L25"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "release",
    "action": "On the adventure view, cycles village, party and boss views unless a free take or live recording is running; the first visit to the boss view queues a settings save for stopped, silent idle time, even without SAVE.",
    "short_label": "NEXT VIEW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1009-1014",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1009-L1014"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "296-298",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L296-L298"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_boss.c",
      "lines": "139-142",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L139-L142"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "Hold 0.7 s to open HOME or close an open menu, saving changed settings immediately while stopped or later after playback.",
    "short_label": "MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "594-611",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L594-L611"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "943-954",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L943-L954"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "long_press",
    "action": "Hold 0.7 s to close the menu and save changed settings at once while stopped or later after playback stops, without another question.",
    "short_label": "CLOSE MENU",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "943-954",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L943-L954"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "701-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L701-L713"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "708-717",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L708-L717"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "574-580",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L574-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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "708-717",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L708-L717"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "574-580",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L574-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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "708-717",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L708-L717"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "574-580",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L574-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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "708-717",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L708-L717"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "574-580",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L574-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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "708-717",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L708-L717"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "574-580",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L574-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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "708-717",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L708-L717"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "574-580",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L574-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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "708-717",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L708-L717"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "574-580",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L574-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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "708-717",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L708-L717"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "574-580",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L574-L580"
     }
    ]
   },
   {
    "mode": "unlock_banner",
    "gesture": "press",
    "action": "Closes the unlock notice and consumes the following tap.",
    "short_label": "CLOSE NOTICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "941-942",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L941-L942"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "release",
    "action": "Leaves the picker and restores the old sound only if the highlighted index differs from the last committed index, then restores solo and paused playback; browsing away and back can discard prior sound edits.",
    "short_label": "CANCEL PICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "137-180",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L137-L180"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "256-260",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L256-L260"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "956-960",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L956-L960"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Cycles ENV and ENV DEST, with no held layer.",
    "short_label": "ENV PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1043-1045",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1043-L1045"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "182-195",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L182-L195"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "279-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L279-L280"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Does nothing on this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "999-1007",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L999-L1007"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "421-434",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L421-L434"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "26-65",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L26-L65"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Does nothing on this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "999-1007",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L999-L1007"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "421-434",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L421-L434"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "26-65",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L26-L65"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Does nothing on this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "999-1007",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L999-L1007"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "421-434",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L421-L434"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "26-65",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L26-L65"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Cycles LFO DEST and LFO, with no held layer.",
    "short_label": "LFO PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1046-1048",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1046-L1048"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "182-195",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L182-L195"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "281-282",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L281-L282"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Does nothing on this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "999-1007",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L999-L1007"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "421-434",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L421-L434"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "26-65",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L26-L65"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Does nothing on this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "999-1007",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L999-L1007"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "421-434",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L421-L434"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "26-65",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L26-L65"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "Does nothing on this screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "999-1007",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L999-L1007"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "421-434",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L421-L434"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "26-65",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L26-L65"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "618-620",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L618-L620"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "24-25",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L24-L25"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "283-286",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L283-L286"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "694-749",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L694-L749"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "24-25",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L24-L25"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "A short untouched tap cycles SCL and SCL 2.",
    "short_label": "SEL PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "644-646",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L644-L646"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "182-195",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L182-L195"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "287-288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L287-L288"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the key and chord layer.",
    "short_label": "KEY/CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "694-749",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L694-L749"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Opens the highlighted page or changes the selected setting.",
    "short_label": "OPEN / SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L468"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Keeps the preview on the hero and exits, resetting synth effects, chord, arp and pan without a question or undo; a saved user sound is replaced by that engine’s first factory sound here, and autosave can keep the result later.",
    "short_label": "COPY SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "340-354",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L340-L354"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/upreset.c",
      "lines": "253-260",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/upreset.c#L253-L260"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "235-269",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L235-L269"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "383-397",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L383-L397"
     }
    ]
   },
   {
    "mode": "filter_menu",
    "gesture": "press",
    "action": "Keeps the previewed scene filter and queues a settings save for stopped, quiet idle time.",
    "short_label": "KEEP FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "290-295",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L290-L295"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "press",
    "action": "Opens the song list for the chosen game.",
    "short_label": "CHOOSE GAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "960-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L960-L965"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "press",
    "action": "Starts the selected populated song, or shows upload guidance on the add-file card.",
    "short_label": "START SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "960-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L960-L965"
     }
    ]
   },
   {
    "mode": "game_result",
    "gesture": "press",
    "action": "Restarts the selected training song.",
    "short_label": "RETRY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "960-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L960-L965"
     }
    ]
   },
   {
    "mode": "lowcut",
    "gesture": "press",
    "action": "Cycles this setting; closing the HOME menu keeps changed settings immediately while stopped or later after playback.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "393-398",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L393-L398"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "usb_audio",
    "gesture": "press",
    "action": "Cycles this setting; closing the HOME menu keeps changed settings immediately while stopped or later after playback.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "400-402",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L400-L402"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "boot_sound",
    "gesture": "press",
    "action": "Cycles this setting; closing the HOME menu keeps changed settings immediately while stopped or later after playback.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "404-406",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L404-L406"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "ult_option",
    "gesture": "press",
    "action": "Cycles this setting; closing the HOME menu keeps changed settings immediately while stopped or later after playback.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "408-414",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L408-L414"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "enemies",
    "gesture": "press",
    "action": "Cycles this setting and queues a settings save immediately for stopped, silent time after 1.5 s without panel input, even while the menu stays open, with attempts at least 5 s apart.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "416-420",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L416-L420"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "67-72",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L67-L72"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "damage",
    "gesture": "press",
    "action": "Cycles this setting and queues a settings save immediately for stopped, silent time after 1.5 s without panel input, even while the menu stays open, with attempts at least 5 s apart.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "422-424",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L422-L424"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "67-72",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L67-L72"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "boss_speed",
    "gesture": "press",
    "action": "Cycles this setting and queues a settings save immediately for stopped, silent time after 1.5 s without panel input, even while the menu stays open, with attempts at least 5 s apart.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "416-420",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L416-L420"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "67-72",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L67-L72"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "A short untouched tap cycles EDIT 1, EDIT 2, VOICE and VOICE 2.",
    "short_label": "EDIT PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "621-639",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L621-L639"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289-292",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289-L292"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "With drums selected on the adventure view, opens the last-used DRUMS page, GRID or KIT.",
    "short_label": "DRUMS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "623-630",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L623-L630"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "9-11",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L9-L11"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "108-116",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L108-L116"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Switches to the kit page.",
    "short_label": "KIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "623-626",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L623-L626"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Switches from KIT to GRID.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "623-626",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L623-L626"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "632-637",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L632-L637"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the erase layer.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "694-749",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L694-L749"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "641-643",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L641-L643"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "301-302",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L301-L302"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the note-repeat layer (not the arpeggiator).",
    "short_label": "ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "694-749",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L694-L749"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "621-640",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L621-L640"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "303-305",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L303-L305"
     }
    ]
   },
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "With drums selected on the adventure view, opens the last-used DRUMS page, GRID or KIT.",
    "short_label": "DRUMS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "621-630",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L621-L630"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Switches to the kit page.",
    "short_label": "KIT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "621-630",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L621-L630"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Switches from KIT to GRID.",
    "short_label": "GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "621-630",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L621-L630"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "639",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L639"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "182-195",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L182-L195"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the step-entry layer.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "694-749",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L694-L749"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "A short untouched tap cycles GLOBAL, MASTER, SYSTEM and DRUMS.",
    "short_label": "GLO PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "647-649",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L647-L649"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "293-296",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L293-L296"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the mix layer.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "694-749",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L694-L749"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "tracks",
    "gesture": "press",
    "action": "Opens the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "653-654",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L653-L654"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Opens the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "655-656",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L655-L656"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Opens the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "655-656",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L655-L656"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "press",
    "action": "While stopped, writes the song order to settings flash immediately, without another question or undo.",
    "short_label": "SAVE SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "651-652",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L651-L652"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "627-637",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L627-L637"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "press",
    "action": "A short untouched tap on other pages cycles PRESETS, USER, PROJECT and TOOLS.",
    "short_label": "SAVE PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "650-658",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L650-L658"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "297-300",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L297-L300"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Held: the song layer.",
    "short_label": "SONG LAYER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "694-749",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L694-L749"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1032-1041",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1032-L1041"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1032-1041",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1032-L1041"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "hold",
    "action": "While held, keys hit at ghost level.",
    "short_label": "GHOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "953-957",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L953-L957"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1020"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Restores the previous pattern and length for one track; sound changes are outside undo.",
    "short_label": "UNDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "751-762",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L751-L762"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "135-158",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L135-L158"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "218-235",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L218-L235"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Moves to the previous page of 16 steps, wrapping around.",
    "short_label": "PAGE -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "764-772",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L764-L772"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "hold",
    "action": "On the drum track, held before a roll key goes down: the roll plays ghost hits.",
    "short_label": "GHOST ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "953-957",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L953-L957"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1020"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "37-45",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L37-L45"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Returns a submenu to the list or closes the list, saving changed settings at once while stopped or later after playback stops.",
    "short_label": "CLOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "251-268",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L251-L268"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "stopped",
    "gesture": "press_with:button_oct_up",
    "action": "Hold both octave buttons for 5 s while stopped to save pending work and enter update mode; outside menus a selected synth’s distortion, chorus, delay and reverb reset at 0.8 s and that reset is saved at 5 s, with no question or undo, while releasing earlier cancels update entry but leaves any effects reset already made.",
    "short_label": "UPDATE 5s",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "820-832",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L820-L832"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/main.c",
      "lines": "242-263",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/main.c#L242-L263"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "676-685",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L676-L685"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "press_with:button_oct_up",
    "action": "Hold OCT− and OCT+ together for 0.8 s outside menus to reset the selected synth’s distortion, chorus, delay and reverb immediately without a question or undo; factory sounds use their preset sends, while user sounds use fixed values of 0, 24, 28 and 36 instead of their saved sends.",
    "short_label": "FX RESET .8s",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "820-832",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L820-L832"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "276-282",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L276-L282"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "294-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L294-L301"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Leaves the picker and restores the old sound only if the highlighted index differs from the last committed index, then restores solo and paused playback; browsing away and back can discard prior sound edits.",
    "short_label": "CANCEL PICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "137-180",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L137-L180"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "256-260",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L256-L260"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "956-960",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L956-L960"
     }
    ]
   },
   {
    "mode": "filter_menu",
    "gesture": "press",
    "action": "Returns to the menu list and restores the kept scene filter.",
    "short_label": "CANCEL VIEW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "251-254",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L251-L254"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "long_press",
    "action": "Hold OCT− for more than 0.6 s to stop the game’s notes and return to its song list.",
    "short_label": "LEAVE GAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "906-909",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L906-L909"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "A short OCT− tap does nothing during the game.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "954-959",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L954-L959"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "long_press",
    "action": "Hold OCT− for more than 0.6 s to stop the game’s notes and return to its song list.",
    "short_label": "LEAVE GAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "906-909",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L906-L909"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "A short OCT− tap does nothing during the game.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "954-959",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L954-L959"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "press",
    "action": "Returns to the HOME menu list.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "954-959",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L954-L959"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "press",
    "action": "Returns to game choice.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "954-959",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L954-L959"
     }
    ]
   },
   {
    "mode": "game_result",
    "gesture": "press",
    "action": "Returns to the song list.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "954-959",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L954-L959"
     }
    ]
   },
   {
    "mode": "game_import_help",
    "gesture": "press",
    "action": "Returns to game choice.",
    "short_label": "BACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "954-959",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L954-L959"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "press",
    "action": "Returns to the HOME menu list without closing the menu.",
    "short_label": "BACK TO LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "262-268",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L262-L268"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "press",
    "action": "Returns to the HOME menu list without closing the menu.",
    "short_label": "BACK TO LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "262-268",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L262-L268"
     }
    ]
   },
   {
    "mode": "party_menu",
    "gesture": "press",
    "action": "Returns to the HOME menu list without closing the menu.",
    "short_label": "BACK TO LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "262-268",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L262-L268"
     }
    ]
   },
   {
    "mode": "status",
    "gesture": "press",
    "action": "Returns to the HOME menu list without closing the menu.",
    "short_label": "BACK TO LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "262-268",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L262-L268"
     }
    ]
   },
   {
    "mode": "led_menu",
    "gesture": "press",
    "action": "Returns to the HOME menu list without closing the menu.",
    "short_label": "BACK TO LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "262-268",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L262-L268"
     }
    ]
   },
   {
    "mode": "importer",
    "gesture": "press",
    "action": "Returns to the HOME menu list without closing the menu.",
    "short_label": "BACK TO LIST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "262-268",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L262-L268"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1032-1041",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1032-L1041"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1032-1041",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1032-L1041"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "hold",
    "action": "While held, keys hit at hard level.",
    "short_label": "HARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "953-957",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L953-L957"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1020"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Redo what undo took back.",
    "short_label": "REDO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "751-762",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L751-L762"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "135-158",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L135-L158"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Moves to the next page of 16 steps, wrapping around.",
    "short_label": "PAGE +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "764-772",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L764-L772"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "hold",
    "action": "On the drum track, held before a roll key goes down: the roll plays hard hits.",
    "short_label": "HARD ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "953-957",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L953-L957"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1020"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "37-55",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L37-L55"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Opens the highlighted page or changes the selected setting.",
    "short_label": "OPEN / SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L468"
     }
    ]
   },
   {
    "mode": "stopped",
    "gesture": "press_with:button_oct_down",
    "action": "Hold both octave buttons for 5 s while stopped to save pending work and enter update mode; outside menus a selected synth’s distortion, chorus, delay and reverb reset at 0.8 s and that reset is saved at 5 s, with no question or undo, while releasing earlier cancels update entry but leaves any effects reset already made.",
    "short_label": "UPDATE 5s",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "820-832",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L820-L832"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/main.c",
      "lines": "242-263",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/main.c#L242-L263"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "676-685",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L676-L685"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "press_with:button_oct_down",
    "action": "Hold OCT− and OCT+ together for 0.8 s outside menus to reset the selected synth’s distortion, chorus, delay and reverb immediately without a question or undo; factory sounds use their preset sends, while user sounds use fixed values of 0, 24, 28 and 36 instead of their saved sends.",
    "short_label": "FX RESET .8s",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "820-832",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L820-L832"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "276-282",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L276-L282"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "294-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L294-L301"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "press",
    "action": "Opens the highlighted page or changes the selected setting.",
    "short_label": "OPEN / SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L468"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Does nothing in the sound picker.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "313-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L358"
     }
    ]
   },
   {
    "mode": "status",
    "gesture": "press",
    "action": "Selects the next hero for keyboard playing and subsequent recording, and shows its status.",
    "short_label": "NEXT HERO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "371-373",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L371-L373"
     }
    ]
   },
   {
    "mode": "filter_menu",
    "gesture": "press",
    "action": "Keeps the previewed scene filter and queues a settings save for stopped, quiet idle time.",
    "short_label": "KEEP FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "290-295",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L290-L295"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "press",
    "action": "Opens the song list for the chosen game.",
    "short_label": "CHOOSE GAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "960-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L960-L965"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "press",
    "action": "Starts the selected populated song, or shows upload guidance on the add-file card.",
    "short_label": "START SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "960-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L960-L965"
     }
    ]
   },
   {
    "mode": "game_result",
    "gesture": "press",
    "action": "Restarts the selected training song.",
    "short_label": "RETRY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "960-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L960-L965"
     }
    ]
   },
   {
    "mode": "lowcut",
    "gesture": "press",
    "action": "Cycles this setting; closing the HOME menu keeps changed settings immediately while stopped or later after playback.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "393-398",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L393-L398"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "usb_audio",
    "gesture": "press",
    "action": "Cycles this setting; closing the HOME menu keeps changed settings immediately while stopped or later after playback.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "400-402",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L400-L402"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "boot_sound",
    "gesture": "press",
    "action": "Cycles this setting; closing the HOME menu keeps changed settings immediately while stopped or later after playback.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "404-406",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L404-L406"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "ult_option",
    "gesture": "press",
    "action": "Cycles this setting; closing the HOME menu keeps changed settings immediately while stopped or later after playback.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "408-414",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L408-L414"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     }
    ]
   },
   {
    "mode": "enemies",
    "gesture": "press",
    "action": "Cycles this setting and queues a settings save immediately for stopped, silent time after 1.5 s without panel input, even while the menu stays open, with attempts at least 5 s apart.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "416-420",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L416-L420"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "67-72",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L67-L72"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "damage",
    "gesture": "press",
    "action": "Cycles this setting and queues a settings save immediately for stopped, silent time after 1.5 s without panel input, even while the menu stays open, with attempts at least 5 s apart.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "422-424",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L422-L424"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "67-72",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L67-L72"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "boss_speed",
    "gesture": "press",
    "action": "Cycles this setting and queues a settings save immediately for stopped, silent time after 1.5 s without panel input, even while the menu stays open, with attempts at least 5 s apart.",
    "short_label": "NEXT VALUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "240-241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L240-L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "416-420",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L416-L420"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "100-109",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L100-L109"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "67-72",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L67-L72"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/recovery.c",
      "lines": "41-70",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/recovery.c#L41-L70"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/bootguard.h",
      "lines": "27-30",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/bootguard.h#L27-L30"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/main.c",
      "lines": "356-357",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/main.c#L356-L357"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1068-1070",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1070"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1068-1070",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1070"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-982",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L982"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-982",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L982"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-982",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L982"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-982",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L982"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-982",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L982"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-982",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L982"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-982",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L982"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-982",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L982"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-982",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L982"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1068-1070",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1068-L1070"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Does nothing while the visualizer is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "360-366",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L360-L366"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "436-439",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L436-L439"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "436-439",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L436-L439"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in the menu list.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L468"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "turn",
    "action": "Does nothing on the SONG screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "85-86",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L85-L86"
     }
    ]
   },
   {
    "mode": "filter_menu",
    "gesture": "turn",
    "action": "Previews the next or previous scene filter; previewing alone does not keep the choice.",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "283-288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L283-L288"
     }
    ]
   },
   {
    "mode": "led_menu",
    "gesture": "turn",
    "action": "Selects Waves, Fade, Explosion, Rain, Comet or Fireworks and previews the effect.",
    "short_label": "LIGHT FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "299-310",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L299-L310"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "91-92",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L91-L92"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "turn",
    "action": "Applies the next or previous sound for preview and plays its phrase once the knob rests for 0.45 s.",
    "short_label": "PREVIEW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "313-338",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L338"
     }
    ]
   },
   {
    "mode": "party_menu",
    "gesture": "turn",
    "action": "Selects the hero for keyboard playing and subsequent recording while moving between its cards, stopping at the ends.",
    "short_label": "HERO CARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "369-383",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L369-L383"
     }
    ]
   },
   {
    "mode": "status",
    "gesture": "turn",
    "action": "Does nothing on the status sheet.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "369-386",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L369-L386"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "turn",
    "action": "Sets the chosen populated song’s practice tempo from 40 to 240 BPM for this session.",
    "short_label": "SONG TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "809-820",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L809-L820"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "turn",
    "action": "Does nothing during the game.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "814-818",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L814-L818"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "946-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L946-L965"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "turn",
    "action": "Does nothing during the game.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "814-818",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L814-L818"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "946-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L946-L965"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Loads a factory sound by category or a saved user sound immediately, replacing the track’s sound edits and releasing its held notes and arp pool without a question or undo; On drums it selects the kit.",
    "short_label": "SOUND/KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1056-1064",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1056-L1064"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "386-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L386-L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "235-268",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L235-L268"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1642-1651",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1642-L1651"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Loads a factory sound by category or a saved user sound immediately, replacing the track’s sound edits and releasing its held notes and arp pool without a question or undo.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1056-1064",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1056-L1064"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "386-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L386-L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "235-268",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L235-L268"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1642-1651",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1642-L1651"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1056-1064",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1056-L1064"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Picks the drum kit.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "447",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L447"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Picks the drum kit.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "447",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L447"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Moves through the fifteen menu items, wrapping around.",
    "short_label": "CURSOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-390",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L390"
     }
    ]
   },
   {
    "mode": "filter_menu",
    "gesture": "turn",
    "action": "Previews the next or previous scene filter; previewing alone does not keep the choice.",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "283-288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L283-L288"
     }
    ]
   },
   {
    "mode": "led_menu",
    "gesture": "turn",
    "action": "Selects Waves, Fade, Explosion, Rain, Comet or Fireworks and previews the effect.",
    "short_label": "LIGHT FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "299-310",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L299-L310"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "91-92",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L91-L92"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "turn",
    "action": "Applies the next or previous sound for preview and plays its phrase once the knob rests for 0.45 s.",
    "short_label": "PREVIEW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "313-338",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L338"
     }
    ]
   },
   {
    "mode": "party_menu",
    "gesture": "turn",
    "action": "Selects the hero for keyboard playing and subsequent recording while moving between its cards, stopping at the ends.",
    "short_label": "HERO CARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "369-383",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L369-L383"
     }
    ]
   },
   {
    "mode": "status",
    "gesture": "turn",
    "action": "Does nothing on the status sheet.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "369-386",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L369-L386"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "turn",
    "action": "Switches between memory information and credits.",
    "short_label": "MEM / CREDIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "270-276",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L270-L276"
     }
    ]
   },
   {
    "mode": "importer",
    "gesture": "turn",
    "action": "Selects a sample or training-song slot, wrapping through all fifteen.",
    "short_label": "FILE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "80-90",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L80-L90"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Cycles Sky, Tides, Ring, Canyon and Scope, wrapping around.",
    "short_label": "VIEW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "360-366",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L360-L366"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "757-760",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L757-L760"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "turn",
    "action": "Switches between Piano Hero and FM Hero.",
    "short_label": "GAME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "946-948",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L946-L948"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "turn",
    "action": "Selects one of six training songs or the add-file card, wrapping around.",
    "short_label": "TRAINING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "949-952",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L949-L952"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "turn",
    "action": "Does nothing during the game.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "814-818",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L814-L818"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "946-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L946-L965"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "turn",
    "action": "Does nothing during the game.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "814-818",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L814-L818"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "946-965",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L946-L965"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Selects drums, synth 1, synth 2 or synth 3 in that order, stopping at the ends; recording follows it, while layers, the song screen and a free take consume its turns.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "450-466",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L450-L466"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "983-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L983-L984"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "1066-1067",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L1066-L1067"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "85-86",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L85-L86"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Selects another hero in drum-first order and returns to the adventure view when leaving drums.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "440-445",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L440-L445"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "450-454",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L450-L454"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Selects another hero in drum-first order and returns to the adventure view when leaving drums.",
    "short_label": "TRACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "440-445",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L440-L445"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "450-454",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L450-L454"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "turn",
    "action": "Changes hero with wraparound, applies the picker’s conditional preview restoration and opens the new hero’s sound list.",
    "short_label": "HERO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "321-325",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L321-L325"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "169-180",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L169-L180"
     }
    ]
   },
   {
    "mode": "party_menu",
    "gesture": "turn",
    "action": "Changes cleric or bard on synth 3, or knight or warrior on drums after the first-boss unlock; these are appearance choices and stop at the ends.",
    "short_label": "CLASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "374-383",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L374-L383"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_fig.c",
      "lines": "10-18",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_fig.c#L10-L18"
     }
    ]
   },
   {
    "mode": "status",
    "gesture": "turn",
    "action": "Selects the hero for keyboard playing and subsequent recording, wrapping around, and shows its status.",
    "short_label": "HERO STATUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "369-373",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L369-L373"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_result",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_import_help",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "turn",
    "action": "Does nothing while the layer is held or locked.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "978-984",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L978-L984"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Global swing for all tracks; Fast turns take larger steps on wider numeric ranges.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "364-391",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L364-L391"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets the 1st value on the current page, with no effect on empty columns or unavailable drum-track values and faster steps for wide numeric ranges.",
    "short_label": "VALUE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "455-470",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L455-L470"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Moves the step cursor.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "394-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L394-L425"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Selects the drum lane for grid edits without playing it.",
    "short_label": "DRUM LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "451-454",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L451-L454"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Picks the drum kit.",
    "short_label": "KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "469-474",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L469-L474"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "turn",
    "action": "Moves the cursor through the song entries.",
    "short_label": "ENTRY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "68-84",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L68-L84"
     }
    ]
   },
   {
    "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": "REC MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "780-806",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L780-L806"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "993-997",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L993-L997"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Does nothing while the visualizer is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "360-366",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L360-L366"
     }
    ]
   },
   {
    "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 take larger steps on wider numeric ranges.",
    "short_label": "MASTER FILT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "331-338",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L331-L338"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Shifts the pattern’s steps one position earlier or later.",
    "short_label": "SHIFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "49-66",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L49-L66"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "347-350",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L347-L350"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "24",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L24"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "Chooses the drum lane for new steps without auditioning it, or sets the synth note to enter.",
    "short_label": "SOUND/NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "351-372",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L351-L372"
     }
    ]
   },
   {
    "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": "SOUND/NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "351-356",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "159-201",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L159-L201"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "374-388",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L374-L388"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 1; Fast turns take larger steps on wider numeric ranges.",
    "short_label": "LEVEL T1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "390-393",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L390-L393"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "319-397",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L319-L397"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Changes the highlighted setting, using left for less or off and right for more or on.",
    "short_label": "SETTING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L468"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Loads a factory sound by category or a saved user sound immediately, replacing the track’s sound edits and releasing its held notes and arp pool without a question or undo.",
    "short_label": "SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "472-476",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L472-L476"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "386-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L386-L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1642-1651",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1642-L1651"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Picks user slot 1-32.",
    "short_label": "USER SLOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "484-488",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L484-L488"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Selects saved project 1–4, which are also song sections A–D.",
    "short_label": "PROJECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "115",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L115"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "299",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L299"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Two rightward clicks within about 1.5 s clear the selected track’s pattern in memory; undo can restore its pattern and length, and autosave can later keep the clear.",
    "short_label": "CLEAR PATT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "508-534",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L508-L534"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "135-158",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L135-L158"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "675-699",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L675-L699"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "turn",
    "action": "Does nothing in the sound picker.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "313-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L358"
     }
    ]
   },
   {
    "mode": "led_menu",
    "gesture": "turn",
    "action": "Sets LED effect speed from 0 to 15 and previews it.",
    "short_label": "LED SPEED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "299-309",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L299-L309"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "turn_ccw",
    "action": "Rewinds about 0.45 s per detent, clears later hit flags and the combo, and releases the game’s sounding notes.",
    "short_label": "REWIND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "912-928",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L912-L928"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "turn_cw",
    "action": "Does nothing when turned right during a game.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "912-918",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L912-L918"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "turn_ccw",
    "action": "Rewinds about 0.45 s per detent, clears later hit flags and the combo, and releases the game’s sounding notes.",
    "short_label": "REWIND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "912-928",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L912-L928"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "turn_cw",
    "action": "Does nothing when turned right during a game.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "912-918",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L912-L918"
     }
    ]
   },
   {
    "mode": "lowcut",
    "gesture": "turn",
    "action": "Turns the speaker low cut on to the right or off to the left.",
    "short_label": "LOWCUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "393-398",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L393-L398"
     }
    ]
   },
   {
    "mode": "usb_audio",
    "gesture": "turn",
    "action": "Chooses FULL to the right or MASTER to the left for USB audio level.",
    "short_label": "USB AUDIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "400-402",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L400-L402"
     }
    ]
   },
   {
    "mode": "boot_sound",
    "gesture": "turn",
    "action": "Turns the startup sound on to the right or off to the left.",
    "short_label": "BOOT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "404-406",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L404-L406"
     }
    ]
   },
   {
    "mode": "ult_option",
    "gesture": "turn",
    "action": "Cycles BAND, FULL and OFF for the ultimate display.",
    "short_label": "ULT DISPLAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "408-414",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L408-L414"
     }
    ]
   },
   {
    "mode": "enemies",
    "gesture": "turn",
    "action": "Sets the scene’s enemy count to few, normal or many; this queues a settings save immediately for stopped, silent time after 1.5 s without panel input, even while the menu stays open, with attempts at least 5 s apart.",
    "short_label": "MAP ENEMIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "416-420",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L416-L420"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "67-72",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L67-L72"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "damage",
    "gesture": "turn",
    "action": "Shows damage numbers to the right or hides them to the left; this queues a settings save immediately for stopped, silent time after 1.5 s without panel input, even while the menu stays open, with attempts at least 5 s apart.",
    "short_label": "DAMAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "422-424",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L422-L424"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "67-72",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L67-L72"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "boss_speed",
    "gesture": "turn",
    "action": "Sets boss speed to slow, normal or fast; this queues a settings save immediately for stopped, silent time after 1.5 s without panel input, even while the menu stays open, with attempts at least 5 s apart.",
    "short_label": "BOSS SPEED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "416-420",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L416-L420"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "67-72",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L67-L72"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "705-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L705-L713"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "action": "Sets envelope attack time.",
    "short_label": "ATTACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "279",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L279"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "action": "Sets envelope depth for filter cutoff.",
    "short_label": "ENV FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "action": "Sets LFO depth for pitch.",
    "short_label": "LFO PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "281",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "action": "Sets LFO speed.",
    "short_label": "LFO RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "282",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L282"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "action": "Sets the selected synth’s distortion.",
    "short_label": "DISTORTION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "283",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L283"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "action": "Chooses slicer off, gate or stutter.",
    "short_label": "SLICER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "284",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L284"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "turn",
    "action": "Chooses a tempo division for delay time.",
    "short_label": "DELAY TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "285",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L285"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "turn",
    "action": "Sets reverb size.",
    "short_label": "ROOM SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "286",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L286"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_scl",
    "gesture": "turn",
    "action": "Chooses the selected synth’s root note.",
    "short_label": "ROOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "287",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L287"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_scl_2",
    "gesture": "turn",
    "action": "Transposes the selected synth by up to 24 semitones either way.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L288"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "action": "Chooses polyphonic, mono, legato or unison playing.",
    "short_label": "VOICE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "291",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L291"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "turn",
    "action": "Chooses rotating or reused voice allocation.",
    "short_label": "VOICE PICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "292",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L292"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "action": "Sets the global tempo from 40 to 240 BPM, with faster turns taking larger steps.",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "293",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L293"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "action": "Sets the master dust effect.",
    "short_label": "DUST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "294",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L294"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "295",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L295"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "action": "Chooses OFF, UP, DN, UPDN, RND or ORD for the arpeggiator.",
    "short_label": "ARP MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L301"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "664-698",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L664-L698"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "turn",
    "action": "Sets arp swing while transport runs; the stopped arp remains straight.",
    "short_label": "ARP SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "302",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L302"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "732-742",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L732-L742"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "action": "Sets pattern length from 1 to 64 steps.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "action": "Sets ANALOG waveform.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_analog.c",
      "lines": "123",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L123"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "action": "Sets ANALOG cutoff.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_analog.c",
      "lines": "127",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L127"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "action": "Sets DIGITAL FM algorithm.",
    "short_label": "ALG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_digital.c",
      "lines": "138",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L138"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "action": "Sets DIGITAL FM depth.",
    "short_label": "IDX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_digital.c",
      "lines": "142",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L142"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "action": "Sets PHASE waveform.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_phase.c",
      "lines": "184",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L184"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "action": "Sets PHASE oscillator detune.",
    "short_label": "DTN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_phase.c",
      "lines": "188",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L188"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "action": "Sets LOFI chip model.",
    "short_label": "CHIP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "215",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L215"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "action": "Sets LOFI pitch sweep.",
    "short_label": "SWP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "219",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L219"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "action": "Sets SAMPLE sample set.",
    "short_label": "SET",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_sample.c",
      "lines": "238",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L238"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "action": "Sets SAMPLE cutoff.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_sample.c",
      "lines": "242",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L242"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "action": "Sets VOICE first vowel.",
    "short_label": "VOWL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_formant.c",
      "lines": "225",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L225"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "action": "Sets VOICE buzz level.",
    "short_label": "BUZZ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_formant.c",
      "lines": "229",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L229"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "action": "Sets TRIO waveform.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_trio.c",
      "lines": "376",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L376"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "action": "Sets TRIO oscillator mode.",
    "short_label": "TRIO MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_trio.c",
      "lines": "380",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L380"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "action": "Sets WHEEL organ registration.",
    "short_label": "REG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "282",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L282"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "action": "Sets WHEEL percussion.",
    "short_label": "PERC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "286",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L286"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "action": "Sets GRAIN grain source.",
    "short_label": "SRC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_grain.c",
      "lines": "434",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L434"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "action": "Sets GRAIN grain pitch.",
    "short_label": "PTCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_grain.c",
      "lines": "438",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L438"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "page_drum_rack",
    "gesture": "turn",
    "action": "Sets drum MIDI input and USB MIDI output to channel 1–16; at 0 only the dedicated input assignment is off and drum key hits still send on channel 10, while other unused input channels follow the selected hero.",
    "short_label": "DRUM MIDI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "296",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L296"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "123",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L123"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1465-1486",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1465-L1486"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "56-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L56-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1021-1024",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1021-L1024"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1096",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1096"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/usb.c",
      "lines": "122-133",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/usb.c#L122-L133"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "Level of the selected track; if it was muted, the first turn unmutes it; Fast turns take larger steps on wider numeric ranges.",
    "short_label": "LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "364-391",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L364-L391"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets the 2nd value on the current page, with no effect on empty columns or unavailable drum-track values and faster steps for wide numeric ranges.",
    "short_label": "VALUE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "455-470",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L455-L470"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "394-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L394-L425"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Moves the grid cursor without auditioning its hits.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "451-454",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L451-L454"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Drum track level.",
    "short_label": "DRUM LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "469-474",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L469-L474"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "68-84",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L68-L84"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "When recording at a tempo: the selected track's loop length, 1, 2 or 4 bars.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "780-806",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L780-L806"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "993-997",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L993-L997"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Does nothing while the visualizer is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "360-366",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L360-L366"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Master DUST (old sampler and vinyl colour); Fast turns take larger steps on wider numeric ranges.",
    "short_label": "DUST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "331-338",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L331-L338"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Turn right to copy the pattern into a second pass, up to 64 steps, or left to halve its length; undo can restore the pattern and length.",
    "short_label": "LEN X2 / 1/2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "68-84",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L68-L84"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "135-158",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L135-L158"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "347-350",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L347-L350"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "Sets the step division to 1/4, 1/8, 1/16, 1/32, 8T or 16T.",
    "short_label": "DIV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "364-365",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L364-L365"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "6",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L6"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Sets the held drum hits’ or synth notes’ level to ghost, soft, normal or hard.",
    "short_label": "HIT LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "159-201",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L159-L201"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "turn_while_holding:button_sel",
    "action": "One scale for all three synth tracks, chosen from 16.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "374-388",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L374-L388"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 2; Fast turns take larger steps on wider numeric ranges.",
    "short_label": "LEVEL T2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "390-393",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L390-L393"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "319-397",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L319-L397"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in the menu list.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L468"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Selects the next or previous engine and immediately loads its first sound, replacing sound edits and releasing notes without a question or undo.",
    "short_label": "ENGINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "477-478",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L477-L478"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "309-340",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L309-L340"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1642-1651",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1642-L1651"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Two rightward clicks within about 1.5 s load the chosen user sound immediately over the track’s sound edits, releasing notes and the arp pool with no undo.",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "482-499",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L482-L499"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/upreset.c",
      "lines": "241-260",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/upreset.c#L241-L260"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1642-1651",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1642-L1651"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Does nothing on the PROJECT page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "299",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L299"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "324-326",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L324-L326"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Two rightward clicks within about 1.5 s reset the selected synth sound to its engine’s first preset immediately, with no undo.",
    "short_label": "INIT SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "508-514",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L508-L514"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "536-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L536-L540"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "turn",
    "action": "Does nothing in the sound picker.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "313-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L358"
     }
    ]
   },
   {
    "mode": "led_menu",
    "gesture": "turn",
    "action": "Sets LED fade from 0 to 15 and previews it.",
    "short_label": "LED FADE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "299-309",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L299-L309"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_result",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_import_help",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "action": "Sets envelope decay time.",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "279",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L279"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "action": "Sets envelope depth for pitch.",
    "short_label": "ENV PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "action": "Sets LFO depth for filter cutoff.",
    "short_label": "LFO FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "281",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "action": "Chooses sine, triangle, saw, square or sample-and-hold modulation.",
    "short_label": "LFO WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "282",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L282"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "action": "Sets the selected synth’s chorus send.",
    "short_label": "CHORUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "283",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L283"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "action": "Chooses slicer pattern 1–16.",
    "short_label": "SLICE PATT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "284",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L284"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "turn",
    "action": "Sets delay feedback.",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "285",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L285"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "turn",
    "action": "Sets reverb damping.",
    "short_label": "DAMPING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "286",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L286"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_scl",
    "gesture": "turn",
    "action": "Chooses the selected synth’s scale from sixteen choices.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "287",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L287"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_scl_2",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L288"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "action": "Sets glide time.",
    "short_label": "GLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "291",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L291"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "turn",
    "action": "Sets unison detune.",
    "short_label": "DETUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "292",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L292"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "action": "Sets global swing for the tracks.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "293",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L293"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "action": "Sets kick-driven ducking of the synths.",
    "short_label": "DUCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "294",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L294"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "action": "Chooses internal, USB or TRS clock; its setting is queued to flash when stopped and quiet.",
    "short_label": "SYNC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "295",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L295"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "701-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L701-L713"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "action": "Chooses 1/4, 1/8, 1/16, 1/32, 8T or 16T for the arp.",
    "short_label": "ARP RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L301"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "turn",
    "action": "Sets the chance of an arp note sounding.",
    "short_label": "ARP CHANCE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "302",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L302"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "action": "Sets step division to 1/4, 1/8, 1/16, 1/32, 8T or 16T.",
    "short_label": "DIVISION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "action": "Sets ANALOG oscillator detune.",
    "short_label": "DTN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_analog.c",
      "lines": "124",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L124"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "action": "Sets ANALOG resonance.",
    "short_label": "RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_analog.c",
      "lines": "128",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L128"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "action": "Sets DIGITAL operator 2 ratio.",
    "short_label": "R2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_digital.c",
      "lines": "139",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L139"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "action": "Sets DIGITAL modulation decay.",
    "short_label": "MDEC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_digital.c",
      "lines": "143",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L143"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "action": "Sets PHASE second waveform.",
    "short_label": "WAVE2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_phase.c",
      "lines": "185",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L185"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "action": "Sets PHASE line mode.",
    "short_label": "LINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_phase.c",
      "lines": "189",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L189"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "action": "Sets LOFI waveform.",
    "short_label": "WAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "216",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L216"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "action": "Sets LOFI vibrato.",
    "short_label": "VIB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "220",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L220"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "action": "Sets SAMPLE sample tuning.",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_sample.c",
      "lines": "239",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L239"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_sample.c",
      "lines": "243",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L243"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "action": "Sets VOICE second vowel.",
    "short_label": "VOWL2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_formant.c",
      "lines": "226",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L226"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "action": "Sets VOICE breath level.",
    "short_label": "BRTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_formant.c",
      "lines": "230",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L230"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "action": "Sets TRIO second oscillator interval.",
    "short_label": "INT2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_trio.c",
      "lines": "377",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L377"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "action": "Sets TRIO cutoff.",
    "short_label": "CUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_trio.c",
      "lines": "381",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L381"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "action": "Sets WHEEL sub level.",
    "short_label": "SUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "283",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L283"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "action": "Sets WHEEL key click.",
    "short_label": "CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "287",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L287"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "action": "Sets GRAIN grain position.",
    "short_label": "POS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_grain.c",
      "lines": "435",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L435"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "action": "Sets GRAIN grain spread.",
    "short_label": "SPRD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_grain.c",
      "lines": "439",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L439"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "page_drum_rack",
    "gesture": "turn",
    "action": "Sets drum-track volume.",
    "short_label": "DRUM LEVEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "296",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L296"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "124",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L124"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "The selected track's pattern length in steps; Fast turns take larger steps on wider numeric ranges.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "364-391",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L364-L391"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets the 3rd value on the current page, with no effect on empty columns or unavailable drum-track values and faster steps for wide numeric ranges.",
    "short_label": "VALUE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "455-470",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L455-L470"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Sets the step to NOTE, TIE or REST.",
    "short_label": "STEP TYPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "416-417",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L416-L417"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "turn",
    "action": "Right adds a hit of the sound on the step; left removes it.",
    "short_label": "HIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "451-468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L451-L468"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Drum reverb send.",
    "short_label": "DRUM REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "469-474",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L469-L474"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "68-84",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L68-L84"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "780-806",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L780-L806"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "993-997",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L993-L997"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Does nothing while the visualizer is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "360-366",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L360-L366"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "turn_while_holding:button_fx",
    "action": "Master DUCK (the kick pumps the synth tracks); Fast turns take larger steps on wider numeric ranges.",
    "short_label": "DUCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "331-338",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L331-L338"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "87-96",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L87-L96"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "347-350",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L347-L350"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "The track's own swing, added to the global one; Fast turns take larger steps on wider numeric ranges.",
    "short_label": "SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "351-372",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L351-L372"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "351-356",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "159-201",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L159-L201"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "374-388",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L374-L388"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 3; Fast turns take larger steps on wider numeric ranges.",
    "short_label": "LEVEL T3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "390-393",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L390-L393"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "319-397",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L319-L397"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in the menu list.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L468"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "472-481",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L472-L481"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Two rightward clicks within about 1.5 s erase the chosen user sound immediately while stopped, rewriting its sixteen-slot bank with no further question or undo.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "482-499",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L482-L499"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/upreset.c",
      "lines": "291-320",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/upreset.c#L291-L320"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/upreset.c",
      "lines": "173-192",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/upreset.c#L173-L192"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Two rightward clicks within about 1.5 s load the selected project while stopped, replacing unsaved work with no undo.",
    "short_label": "LOAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "508-522",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L508-L522"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "345-360",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L345-L360"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "300",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L300"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "324-326",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L324-L326"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "turn",
    "action": "Does nothing in the sound picker.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "313-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L358"
     }
    ]
   },
   {
    "mode": "led_menu",
    "gesture": "turn",
    "action": "Turn right to repeat the effect while a key stays held, or left for one effect per press.",
    "short_label": "LED REPEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "299-309",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L299-L309"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_result",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_import_help",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "action": "Sets envelope sustain level.",
    "short_label": "SUSTAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "279",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L279"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "action": "Sets envelope depth for engine shape.",
    "short_label": "ENV SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "action": "Sets LFO depth for engine shape.",
    "short_label": "LFO SHAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "281",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "action": "Sets LFO starting phase.",
    "short_label": "LFO PHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "282",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L282"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "action": "Sets the selected synth’s delay send.",
    "short_label": "DELAY SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "283",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L283"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "action": "Sets slicer rate to 1/8, 1/16, 1/32, 8T, 16T or 32T.",
    "short_label": "SLICE RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "284",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L284"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "turn",
    "action": "Sets delay tone.",
    "short_label": "DELAY COLOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "285",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L285"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "turn",
    "action": "Sets chorus speed.",
    "short_label": "CHORUS RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "286",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L286"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_scl",
    "gesture": "turn",
    "action": "Chooses chromatic keys, scale snapping or white-key scale mapping.",
    "short_label": "KEY MAPPING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "287",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L287"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_scl_2",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L288"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "action": "Chooses a fixed glide rate or time.",
    "short_label": "GLIDE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "291",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L291"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "turn",
    "action": "Sets track pan.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "292",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L292"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "action": "Chooses metronome off, recording only or always.",
    "short_label": "CLICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "293",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L293"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "action": "Turn left for a master low-pass filter or right for high-pass, with the middle open.",
    "short_label": "MASTER FILT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "294",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L294"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "295",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L295"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "action": "Sets arp range from one to four octaves.",
    "short_label": "ARP OCTAVES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L301"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "turn",
    "action": "Keeps the arp’s note pool after keys are released; with arp mode OFF it does not latch direct keyboard notes.",
    "short_label": "ARP HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "302",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L302"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "782-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L782-L813"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "action": "Sets this track’s swing in addition to global swing, including triplet divisions.",
    "short_label": "TRACK SWING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "208-211",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L208-L211"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "action": "Sets ANALOG oscillator mix.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_analog.c",
      "lines": "125",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L125"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "action": "Sets ANALOG drive.",
    "short_label": "DRV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_analog.c",
      "lines": "129",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L129"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "action": "Sets DIGITAL operator 3 ratio.",
    "short_label": "R3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_digital.c",
      "lines": "140",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L140"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "action": "Sets DIGITAL feedback.",
    "short_label": "FB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_digital.c",
      "lines": "144",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L144"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "action": "Sets PHASE phase distortion depth.",
    "short_label": "DCW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_phase.c",
      "lines": "186",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L186"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "action": "Sets PHASE sub level.",
    "short_label": "SUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_phase.c",
      "lines": "190",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L190"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "action": "Sets pulse width, or the wave-memory table when CHIP is WRAM.",
    "short_label": "DUTY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "217",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L217"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-68",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L47-L68"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "action": "Sets LOFI chip arpeggio.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "221",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L221"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "action": "Sets SAMPLE sample bit reduction.",
    "short_label": "BITS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_sample.c",
      "lines": "240",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L240"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "action": "Sets SAMPLE drive.",
    "short_label": "DRV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_sample.c",
      "lines": "244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "action": "Sets VOICE vowel transition time.",
    "short_label": "TALK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_formant.c",
      "lines": "227",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L227"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "action": "Sets VOICE formant resonance.",
    "short_label": "Q",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_formant.c",
      "lines": "231",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L231"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "action": "Sets TRIO third oscillator interval.",
    "short_label": "INT3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_trio.c",
      "lines": "378",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L378"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "action": "Sets TRIO resonance.",
    "short_label": "RES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_trio.c",
      "lines": "382",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L382"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "action": "Sets WHEEL middle drawbar adjustment.",
    "short_label": "BODY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "284",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L284"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "action": "Sets WHEEL drive.",
    "short_label": "DRV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L288"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "action": "Sets GRAIN grain size.",
    "short_label": "SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_grain.c",
      "lines": "436",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L436"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "action": "Sets GRAIN random variation.",
    "short_label": "RAND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_grain.c",
      "lines": "440",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L440"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "page_drum_rack",
    "gesture": "turn",
    "action": "Sets the drum-track reverb send.",
    "short_label": "DRUM REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "296",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L296"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "125",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L125"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "tracks",
    "gesture": "turn",
    "action": "The selected track's pan; Fast turns take larger steps on wider numeric ranges.",
    "short_label": "PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "364-391",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L364-L391"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "turn",
    "action": "Sets the 4th value on the current page, with no effect on empty columns or unavailable drum-track values and faster steps for wide numeric ranges.",
    "short_label": "VALUE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "455-470",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L455-L470"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "352-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L352-L358"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "turn",
    "action": "Step flag: none, accent, slide, or both.",
    "short_label": "FLAG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "394-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L394-L425"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "451-468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L451-L468"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "turn",
    "action": "Drum track pan.",
    "short_label": "DRUM PAN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "469-474",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L469-L474"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_song.c",
      "lines": "68-84",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_song.c#L68-L84"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "turn",
    "action": "Does nothing on the recording preparation screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "806",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L806"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "993-997",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L993-L997"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "turn",
    "action": "Does nothing while the visualizer is open.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "360-366",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L360-L366"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "331-338",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L331-L338"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "turn_while_holding:button_edit",
    "action": "Does nothing.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "339-346",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L339-L346"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "347-350",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L347-L350"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "turn_while_holding:button_seq",
    "action": "The track's length, 1-64 steps; Fast turns take larger steps on wider numeric ranges.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "351-372",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L351-L372"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "turn_while_holding:button_seq",
    "action": "Sets the track length from 1 to 64 steps even while steps are held.",
    "short_label": "LENGTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "351-371",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L351-L371"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "374-388",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L374-L388"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "turn_while_holding:button_glo",
    "action": "Level of track 4 (the drum level); Fast turns take larger steps on wider numeric ranges.",
    "short_label": "LEVEL T4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "390-393",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L390-L393"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "319-397",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L319-L397"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "turn",
    "action": "Does nothing in the menu list.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "389-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "468",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L468"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "turn",
    "action": "Does nothing on the PRESETS page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "472-481",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L472-L481"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "turn",
    "action": "Two rightward clicks within about 1.5 s save the track’s sound into the chosen user slot immediately while stopped, rewriting its sixteen-slot bank with no further overwrite question or undo.",
    "short_label": "USER SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "482-499",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L482-L499"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/upreset.c",
      "lines": "291-320",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/upreset.c#L291-L320"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/upreset.c",
      "lines": "173-192",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/upreset.c#L173-L192"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "turn",
    "action": "Two rightward clicks within about 1.5 s save the working project to the selected slot immediately while stopped, replacing any previous project without another question or undo.",
    "short_label": "PROJECT SAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "508-526",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L508-L526"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "310-325",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L310-L325"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "turn",
    "action": "Two rightward clicks within about 1.5 s replace the working loop with default sounds, empty patterns and default musical settings while leaving saved sections intact; pattern undo restores one track but cannot restore its sound.",
    "short_label": "NEW LOOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "428-452",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L428-L452"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "508-514",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L508-L514"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "542-551",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L542-L551"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "135-158",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L135-L158"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "turn",
    "action": "Does nothing in the sound picker.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "313-358",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L358"
     }
    ]
   },
   {
    "mode": "led_menu",
    "gesture": "turn",
    "action": "Does nothing on the keyboard LED page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "299-310",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L299-L310"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_result",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "game_import_help",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "turn",
    "action": "Does nothing on this game screen.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "244-249",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L244-L249"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "turn",
    "action": "Sets envelope release time.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "279",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L279"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "turn",
    "action": "Sets LFO depth for amplitude.",
    "short_label": "LFO AMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "281",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "turn",
    "action": "Sets the time for modulation to fade in.",
    "short_label": "LFO FADE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "282",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L282"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "turn",
    "action": "Sets the selected synth’s reverb send.",
    "short_label": "REVERB SEND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "283",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L283"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "turn",
    "action": "Sets slicer depth.",
    "short_label": "SLICE DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "284",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L284"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "turn",
    "action": "Sets the master delay level.",
    "short_label": "DELAY MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "285",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L285"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "turn",
    "action": "Sets chorus depth.",
    "short_label": "CHORUS DEPTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "286",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L286"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_scl",
    "gesture": "turn",
    "action": "Chooses off, triad, seventh, ninth, suspended fourth or power chords; white keys trigger them and black keys stay silent.",
    "short_label": "CHORD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "287",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L287"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_scl_2",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L288"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "turn",
    "action": "Chooses last, lowest or highest note priority.",
    "short_label": "NOTE FIRST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "291",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L291"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "turn",
    "action": "Mutes or unmutes the selected track.",
    "short_label": "MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "292",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L292"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "turn",
    "action": "Sets global tuning from −50 to +50.",
    "short_label": "TUNING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "293",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L293"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "turn",
    "action": "Sets note-repeat rate to 1/8, 1/16, 1/32, 32T or 1/64.",
    "short_label": "ROLL RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "294",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L294"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "295",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L295"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "turn",
    "action": "Sets arp note length.",
    "short_label": "ARP GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L301"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "turn",
    "action": "Chooses pitch order or press order for the arp pool, including MODE ORD.",
    "short_label": "ARP ORDER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "302",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L302"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "664-698",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L664-L698"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "turn",
    "action": "Sets sequenced note length.",
    "short_label": "STEP GATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "321-337",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L321-L337"
     }
    ]
   },
   {
    "mode": "edit_analog_1",
    "gesture": "turn",
    "action": "Sets ANALOG noise level.",
    "short_label": "NOIS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_analog.c",
      "lines": "126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_analog_2",
    "gesture": "turn",
    "action": "Sets ANALOG filter keyboard tracking.",
    "short_label": "KTR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_analog.c",
      "lines": "130",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_analog.c#L130"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_digital_1",
    "gesture": "turn",
    "action": "Sets DIGITAL operator 4 ratio.",
    "short_label": "R4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_digital.c",
      "lines": "141",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L141"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_digital_2",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_digital.c",
      "lines": "145",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_digital.c#L145"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_phase_1",
    "gesture": "turn",
    "action": "Sets PHASE phase envelope amount.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_phase.c",
      "lines": "187",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L187"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_phase_2",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_phase.c",
      "lines": "191",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_phase.c#L191"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_lofi_1",
    "gesture": "turn",
    "action": "Sets crush, or the envelope type when CHIP is STEP.",
    "short_label": "CRSH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "218",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L218"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "47-68",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L47-L68"
     }
    ]
   },
   {
    "mode": "edit_lofi_2",
    "gesture": "turn",
    "action": "Sets LOFI tone.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_lofi.c",
      "lines": "222",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_lofi.c#L222"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_sample_1",
    "gesture": "turn",
    "action": "Sets SAMPLE sample looping.",
    "short_label": "LOOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_sample.c",
      "lines": "241",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L241"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_sample_2",
    "gesture": "turn",
    "action": "Does nothing in this column.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_sample.c",
      "lines": "245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_voice_1",
    "gesture": "turn",
    "action": "Sets VOICE formant shift.",
    "short_label": "SHIFT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_formant.c",
      "lines": "228",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L228"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_voice_2",
    "gesture": "turn",
    "action": "Sets VOICE random variation.",
    "short_label": "RAND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_formant.c",
      "lines": "232",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_formant.c#L232"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_trio_1",
    "gesture": "turn",
    "action": "Sets TRIO oscillator detune.",
    "short_label": "DTN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_trio.c",
      "lines": "379",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L379"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_trio_2",
    "gesture": "turn",
    "action": "Sets TRIO pulse width.",
    "short_label": "PW",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_trio.c",
      "lines": "383",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_trio.c#L383"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_wheel_1",
    "gesture": "turn",
    "action": "Sets WHEEL upper drawbar adjustment.",
    "short_label": "TOP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "285",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L285"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_wheel_2",
    "gesture": "turn",
    "action": "Sets WHEEL rotary speaker mode.",
    "short_label": "ROTR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_drawbar.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_drawbar.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_grain_1",
    "gesture": "turn",
    "action": "Sets GRAIN grain density.",
    "short_label": "DENS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_grain.c",
      "lines": "437",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L437"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "edit_grain_2",
    "gesture": "turn",
    "action": "Sets GRAIN tone.",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/eng_grain.c",
      "lines": "441",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_grain.c#L441"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   },
   {
    "mode": "page_drum_rack",
    "gesture": "turn",
    "action": "Does nothing on the Drum Rack page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "296",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L296"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "296",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L296"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "501-505",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L501-L505"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Sets output volume; USB audio follows it unless USB AUDIO is FULL.",
    "short_label": "VOLUME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/main.c",
      "lines": "233-240",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/main.c#L233-L240"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/fx.c",
      "lines": "463-478",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/fx.c#L463-L478"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "400-402",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L400-L402"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays KICK.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 1 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-311",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L311"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Loads section A while stopped or requests it at the next bar while a loop plays, replacing the working loop without undo; it refuses during song playback.",
    "short_label": "PLAY A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "259-270",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L259-L270"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "651-655",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L651-L655"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 1 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named F in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "F3 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 1, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position -4 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE -4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 36 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays KICK.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays KICK.",
    "short_label": "KICK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F#3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 1-16 (if the track is that long).",
    "short_label": "PAGE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named F# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "F#3 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 2, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 37 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays KICK 2.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 2 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-311",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L311"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Loads section B while stopped or requests it at the next bar while a loop plays, replacing the working loop without undo; it refuses during song playback.",
    "short_label": "PLAY B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "259-270",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L259-L270"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "651-655",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L651-L655"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 2 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named G in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "G3 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 3, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position -3 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE -3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 38 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays KICK 2.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays KICK 2.",
    "short_label": "KICK 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G#3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 17-32 (if the track is that long).",
    "short_label": "PAGE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named G# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "G#3 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 4, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 39 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SNARE.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 3 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-311",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L311"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Loads section C while stopped or requests it at the next bar while a loop plays, replacing the working loop without undo; it refuses during song playback.",
    "short_label": "PLAY C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "259-270",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L259-L270"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "651-655",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L651-L655"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 3 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named A in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "A3 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 1, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position -2 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE -2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 40 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays SNARE.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays SNARE.",
    "short_label": "SNARE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A#3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 33-48 (if the track is that long).",
    "short_label": "PAGE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named A# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "A#3 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 2, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 41 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays B3 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CLAP.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 4 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-311",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L311"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Loads section D while stopped or requests it at the next bar while a loop plays, replacing the working loop without undo; it refuses during song playback.",
    "short_label": "PLAY D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "259-270",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L259-L270"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "651-655",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L651-L655"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 4 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named B in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "B3 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 3, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position -1 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE -1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 42 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays CLAP.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays CLAP.",
    "short_label": "CLAP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays HAT.",
    "short_label": "HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 5 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the working loop as section A in memory, requiring a second press within 3 s for a used section; flash follows when stopped and quiet, with no undo.",
    "short_label": "STORE A",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "271-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L271-L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "642-649",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L642-L649"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "687-715",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L687-L715"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 5 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named C in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "C4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 4, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +0 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 43 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays HAT.",
    "short_label": "HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays HAT.",
    "short_label": "HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Shows steps 49-64 (if the track is that long).",
    "short_label": "PAGE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named C# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "C#4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 1, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 44 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays OPEN HAT.",
    "short_label": "OPEN HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 6 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the working loop as section B in memory, requiring a second press within 3 s for a used section; flash follows when stopped and quiet, with no undo.",
    "short_label": "STORE B",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "271-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L271-L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "642-649",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L642-L649"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "687-715",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L687-L715"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 6 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named D in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "D4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 2, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +1 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 45 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays OPEN HAT.",
    "short_label": "OPEN HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays OPEN HAT.",
    "short_label": "OPEN HAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named D# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "D#4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 3, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 46 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays E4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays PEDAL (the pedal hi-hat).",
    "short_label": "PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 7 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the working loop as section C in memory, requiring a second press within 3 s for a used section; flash follows when stopped and quiet, with no undo.",
    "short_label": "STORE C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "271-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L271-L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "642-649",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L642-L649"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "687-715",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L687-L715"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 7 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named E in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "E4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 4, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +2 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 47 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays PEDAL (the pedal hi-hat).",
    "short_label": "PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays PEDAL (the pedal hi-hat).",
    "short_label": "PEDAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays RIM.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 8 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Stores the working loop as section D in memory, requiring a second press within 3 s for a used section; flash follows when stopped and quiet, with no undo.",
    "short_label": "STORE D",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "271-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L271-L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "642-649",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L642-L649"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "687-715",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L687-L715"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 8 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named F in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "F4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 1, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +3 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 48 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays RIM.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays RIM.",
    "short_label": "RIM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named F# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "F#4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 2, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 49 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SNARE 2.",
    "short_label": "SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 9 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 9 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named G in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "G4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 3, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +4 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 50 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays SNARE 2.",
    "short_label": "SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays SNARE 2.",
    "short_label": "SNARE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named G# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "G#4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 4, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 51 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays LOW TOM.",
    "short_label": "LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 10 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing in the GLO layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 10 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named A in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "A4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 1, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +5 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 52 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 17",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays LOW TOM.",
    "short_label": "LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays LOW TOM.",
    "short_label": "LOW TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays A#4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named A# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "A#4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 2, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 53 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 18",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays B4 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays HI TOM.",
    "short_label": "HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 11 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 11 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named B in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "B4 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 3, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +6 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 54 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 19",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays HI TOM.",
    "short_label": "HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays HI TOM.",
    "short_label": "HI TOM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CRASH.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 12 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 12 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named C in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "C5 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 4, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +7 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 8",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 55 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 20",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays CRASH.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays CRASH.",
    "short_label": "CRASH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays C#5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named C# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "C#5 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 1, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 56 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 21",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays RIDE.",
    "short_label": "RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 13 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 13",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Switches loop mode and song mode unless song-order recording is active.",
    "short_label": "LOOP/SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "282-288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L282-L288"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 13 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named D in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "D5 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 2, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +8 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 9",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 57 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 22",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays RIDE.",
    "short_label": "RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays RIDE.",
    "short_label": "RIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays D#5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named D# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "D#5 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 3, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 58 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 23",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays E5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays SHAKER.",
    "short_label": "SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 14 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 14",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Starts or stops recording the section order from the next bar, with settings flash written later once stopped and quiet.",
    "short_label": "SONG REC",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "289-300",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L289-L300"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1162-1196",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1162-L1196"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "701-713",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L701-L713"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 14 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named E in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "E5 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 4, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +9 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 10",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 59 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 24",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays SHAKER.",
    "short_label": "SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays SHAKER.",
    "short_label": "SHAKER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays CONGA.",
    "short_label": "CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 15 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 15",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 15 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named F in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "F5 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 1, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +10 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 11",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 60 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 25",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays CONGA.",
    "short_label": "CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays CONGA.",
    "short_label": "CONGA",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays F#5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "chord_mode",
    "gesture": "press",
    "action": "Does nothing in chord mode.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1044"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "press_while_holding:button_fx",
    "action": "Does nothing in the FX layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "press_while_holding:button_edit",
    "action": "Erases this key’s drum sound, or its mapped synth note when that key is active, from passing steps while playing or the whole pattern while stopped.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "984-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L984-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "619-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L619-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes its mapped note into the cursor step, except with KEYS WHITE or chord mode, where this black key writes nothing; after all keys are released the cursor advances if a note entry was opened.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named F# in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "F#5 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 2, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Does nothing in white-key scale mapping.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 61 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 26",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "press_while_holding:button_glo",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-315",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L315"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "press_while_holding:button_save",
    "action": "Does nothing for this key in the held layer.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "254-304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L254-L304"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Does nothing when this black effect-layer key is released.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "synth_play",
    "gesture": "press",
    "action": "Plays G5 on the selected synth track, moved by the octave buttons and transpose.",
    "short_label": "G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "press",
    "action": "Plays COWBELL.",
    "short_label": "COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "102-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L102-L146"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "149-181",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L149-L181"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1044",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1044"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "11-16",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L11-L16"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "48-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L48-L69"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/punch.c",
      "lines": "238-244",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/punch.c#L238-L244"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "969-975",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L969-L975"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "985-1008",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L985-L1008"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "585-629",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L585-L629"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1016-1020",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1016-L1020"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1031-1037",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1031-L1037"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "863-912",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L863-L912"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "press_while_holding:button_seq",
    "action": "Controls step 16 on the displayed page: pressing an empty step adds the selected drum hit or recent synth notes; an occupied step is removed on key-up unless a knob adjustment kept it.",
    "short_label": "STEP 16",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "237-245",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L237-L245"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "109-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L109-L157"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "247-252",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L247-L252"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "306-311",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L306-L311"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "205-220",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L205-L220"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "301-303",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L301-L303"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "press",
    "action": "Writes this key’s mapped root note into the cursor step, with up to four simultaneous keys in poly mode; a one-key chord is heard but its extra notes are not inserted here, and releasing all keys advances.",
    "short_label": "WRITE STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "558-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L558-L591"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "release",
    "action": "Releases this key’s direct note through the sound’s envelope; an arpeggiator with HOLD on keeps its note pool.",
    "short_label": "NOTE OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1058-1093",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1058-L1093"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "802-813",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L802-L813"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "release",
    "action": "Releasing step key 16 removes an occupied step unless a knob edit kept it.",
    "short_label": "STEP RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "141-157",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L141-L157"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "228-233",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L228-L233"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "release",
    "action": "Releasing the final held key advances the step cursor after note entry, unless recording, armed or taking a free take.",
    "short_label": "NEXT STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "566-591",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L566-L591"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "press",
    "action": "While recording a synth track, a sounding key adds a note to the step up to four notes, replacing the last when full; recording into a tie replaces that step.",
    "short_label": "OVERDUB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "259-280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L259-L280"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "press",
    "action": "Matches a chart note named G in any octave and plays that chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "G5 MATCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "842-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L842-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "press",
    "action": "Hits lane 3, repeating every four physical keys, and plays a matching chart pitch; a wrong press clears the combo and is silent on synth heroes, while the drum hero also triggers its ordinary drum key.",
    "short_label": "LANE 3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "828-844",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "883-899",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L883-L899"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "781-784",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "release",
    "action": "Releases the chart note this key triggered.",
    "short_label": "GAME OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "870-875",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L870-L875"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "press",
    "action": "Plays the hero’s previewed sound on this key while the sound picker is open.",
    "short_label": "AUDITION KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "881-906",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L881-L906"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "959-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L959-L1049"
     }
    ]
   },
   {
    "mode": "snap_keys",
    "gesture": "press",
    "action": "Plays this key’s octave-shifted and transposed note rounded down into the selected scale.",
    "short_label": "SCALE NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "115-120",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L115-L120"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1027-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1027-L1049"
     }
    ]
   },
   {
    "mode": "white_keys",
    "gesture": "press",
    "action": "Plays white-key scale position +11 from C4 as root, with the octave buttons and transpose applied.",
    "short_label": "DEGREE 12",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-146",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L146"
     }
    ]
   },
   {
    "mode": "sample_kit_keys",
    "gesture": "press",
    "action": "Plays drum note 62 from the SAMPLE kit set at octave zero, shifted by the octave buttons and unaffected by scale or transpose.",
    "short_label": "KIT 27",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "108-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L108-L110"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "press",
    "action": "Triggers the chosen BRASIL percussion sound whenever this key produces an active note; chord or white-key mapping can silence black keys.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/voice.c",
      "lines": "373-375",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/voice.c#L373-L375"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "122-126",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L122-L126"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1038-1049",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1038-L1049"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "press",
    "action": "Plays COWBELL.",
    "short_label": "COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "press",
    "action": "Plays COWBELL.",
    "short_label": "COWBELL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1012-1025",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "50-60",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L50-L60"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/drums.c",
      "lines": "84-91",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/drums.c#L84-L91"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "release",
    "action": "Ends this key’s punch effect if it is still the active effect.",
    "short_label": "END EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1064-1068",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1064-L1068"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "release",
    "action": "Stops erasing the note or drum lane assigned to this key.",
    "short_label": "END ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1073-1079",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1073-L1079"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "release",
    "action": "Stops any note-repeat voice started by this key.",
    "short_label": "END ROLL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1080-1083",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1080-L1083"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "release",
    "action": "Ends the outbound MIDI note and any free-take duration for this key while the one-shot drum sound continues.",
    "short_label": "DRUM OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1092-1097",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1092-L1097"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "hold",
    "action": "During direct synth recording, a held note extends through empty steps as ties until another note step or one full pattern; a chord’s hold ends when its final key is released.",
    "short_label": "RECORD TIES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "290-314",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L290-L314"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "332-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L332-L370"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "release",
    "action": "During direct synth recording, ends this note’s recorded hold; release of the final held note can remove the current tie when it occurs early in the step.",
    "short_label": "REC RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "357-370",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L357-L370"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/seq.c",
      "lines": "1085-1089",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1085-L1089"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "tracks",
    "gesture": "shows",
    "action": "Shows the village, party or boss view with track activity and performance values.",
    "short_label": "ADVENTURE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "396-402",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L396-L402"
     }
    ]
   },
   {
    "mode": "visualiser",
    "gesture": "shows",
    "action": "Shows Sky, Tides, Ring, Canyon or Scope responding to the music.",
    "short_label": "VISUALIZER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "757-780",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L757-L780"
     }
    ]
   },
   {
    "mode": "pages",
    "gesture": "shows",
    "action": "Shows the current page’s four values in an adventure scene or its parameter view.",
    "short_label": "PARAMETERS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "step_page",
    "gesture": "shows",
    "action": "Shows the step cursor and its note, type and flags in the Quest step view.",
    "short_label": "STEP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "3-49",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L3-L49"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "drums_grid",
    "gesture": "shows",
    "action": "Shows the drum grid, selected lane and cursor with sound, step, hit and level controls.",
    "short_label": "DRUM GRID",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "484-539",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L484-L539"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "382-394",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L382-L394"
     }
    ]
   },
   {
    "mode": "drums_kit",
    "gesture": "shows",
    "action": "Shows the drum kit’s pads and its kit, level, reverb and pan values.",
    "short_label": "DRUM KIT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "484-539",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L484-L539"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_studio.c",
      "lines": "395-404",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_studio.c#L395-L404"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "shows",
    "action": "Shows the section order, bars, cursor and current playback position.",
    "short_label": "SONG ORDER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "317-378",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L317-L378"
     }
    ]
   },
   {
    "mode": "rec_ready",
    "gesture": "shows",
    "action": "Shows the armed track beside the campfire with MODE, LENGTH and START when available.",
    "short_label": "READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "431-479",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L431-L479"
     }
    ]
   },
   {
    "mode": "count_in",
    "gesture": "shows",
    "action": "Shows the four-beat countdown before recording.",
    "short_label": "COUNT IN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "465-478",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L465-L478"
     }
    ]
   },
   {
    "mode": "free_take",
    "gesture": "shows",
    "action": "Shows the recording camp and track activity while the free take runs.",
    "short_label": "TAKE CAMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "431-435",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L431-L435"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "378-391",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L378-L391"
     }
    ]
   },
   {
    "mode": "hold_clear",
    "gesture": "shows",
    "action": "Shows progress toward clearing the selected track.",
    "short_label": "CLEAR RING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "380-406",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L380-L406"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "shows",
    "action": "Shows sixteen white-key effects and the master filter, dust and duck values.",
    "short_label": "PUNCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "482-504",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L482-L504"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "566-624",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L566-L624"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "shows",
    "action": "Shows note or drum erase targets and the undo and redo controls.",
    "short_label": "ERASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-545",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L505-L545"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "566-624",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L566-L624"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "shows",
    "action": "Shows sixteen steps with their level and ratchet marks, selected page and knob jobs.",
    "short_label": "STEPS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "547-611",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L547-L611"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "566-624",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L566-L624"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "shows",
    "action": "Shows root and scale with note or chord targets and the four scale-layer controls.",
    "short_label": "KEY / SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "612-652",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L612-L652"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "566-624",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L566-L624"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "shows",
    "action": "Shows track mute targets, tap tempo and the four track levels.",
    "short_label": "MIX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "654-676",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L654-L676"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "566-624",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L566-L624"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "shows",
    "action": "Shows section load and store targets, loop or song mode, order recording and song-page access.",
    "short_label": "SECTIONS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "677-714",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L677-L714"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "566-624",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L566-L624"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "shows",
    "action": "Shows the held layer with its lock indication.",
    "short_label": "LOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "708-717",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L708-L717"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "574-580",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L574-L580"
     }
    ]
   },
   {
    "mode": "menu",
    "gesture": "shows",
    "action": "Shows the fifteen HOME menu items and the highlighted setting.",
    "short_label": "OPTIONS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "652-684",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L652-L684"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "5-6",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L5-L6"
     }
    ]
   },
   {
    "mode": "about",
    "gesture": "shows",
    "action": "Shows memory information or the firmware’s credits.",
    "short_label": "ABOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "1118-1170",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L1118-L1170"
     }
    ]
   },
   {
    "mode": "usb_rescue",
    "gesture": "shows",
    "action": "Shows USB rescue instructions and that audio is off.",
    "short_label": "USB RESCUE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/recovery.c",
      "lines": "52-69",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/recovery.c#L52-L69"
     }
    ]
   },
   {
    "mode": "update_countdown",
    "gesture": "shows",
    "action": "Shows the update countdown and then UBOOT.",
    "short_label": "UPDATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/main.c",
      "lines": "252-265",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/main.c#L252-L265"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Shows brief feedback for completed actions, pending second turns or refused operations.",
    "short_label": "MESSAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "101-110",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L101-L110"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "291-299",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L291-L299"
     }
    ]
   },
   {
    "mode": "save_presets",
    "gesture": "shows",
    "action": "Shows the factory and user sound browser without a favourites list.",
    "short_label": "SOUNDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui.c",
      "lines": "386-425",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui.c#L386-L425"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "save_project",
    "gesture": "shows",
    "action": "Shows the four project slots and whether each contains readable music.",
    "short_label": "PROJECTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "3-49",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L3-L49"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Shows crash information for about four seconds before restarting.",
    "short_label": "FAULT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/main.c",
      "lines": "76-96",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/main.c#L76-L96"
     }
    ]
   },
   {
    "mode": "page_env",
    "gesture": "shows",
    "action": "Shows ENV with its four control values and a scene reflecting those settings.",
    "short_label": "ENV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "279",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L279"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_env_dest",
    "gesture": "shows",
    "action": "Shows ENV DEST with its four control values and a scene reflecting those settings.",
    "short_label": "ENV DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "280",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L280"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_lfo_dest",
    "gesture": "shows",
    "action": "Shows LFO DEST with its four control values and a scene reflecting those settings.",
    "short_label": "LFO DEST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "281",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L281"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_lfo",
    "gesture": "shows",
    "action": "Shows LFO with its four control values and a scene reflecting those settings.",
    "short_label": "LFO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "282",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L282"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_fx",
    "gesture": "shows",
    "action": "Shows FX with its four control values and a scene reflecting those settings.",
    "short_label": "FX",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "283",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L283"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_slicer",
    "gesture": "shows",
    "action": "Shows SLICER with its four control values and a scene reflecting those settings.",
    "short_label": "SLICER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "284",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L284"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_dly",
    "gesture": "shows",
    "action": "Shows DLY with its four control values and a scene reflecting those settings.",
    "short_label": "DLY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "285",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L285"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_rev_cho",
    "gesture": "shows",
    "action": "Shows REV/CHO with its four control values and a scene reflecting those settings.",
    "short_label": "REV/CHO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "286",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L286"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_scl",
    "gesture": "shows",
    "action": "Shows SCL with its four control values and a scene reflecting those settings.",
    "short_label": "SCL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "287",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L287"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_scl_2",
    "gesture": "shows",
    "action": "Shows SCL 2 with its four control values and a scene reflecting those settings.",
    "short_label": "SCL 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "288",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L288"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_edit_1",
    "gesture": "shows",
    "action": "Shows EDIT 1 with its four control values and a scene reflecting those settings.",
    "short_label": "EDIT 1",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "289",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L289"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_edit_2",
    "gesture": "shows",
    "action": "Shows EDIT 2 with its four control values and a scene reflecting those settings.",
    "short_label": "EDIT 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_voice",
    "gesture": "shows",
    "action": "Shows VOICE with its four control values and a scene reflecting those settings.",
    "short_label": "VOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "291",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L291"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_voice_2",
    "gesture": "shows",
    "action": "Shows VOICE 2 with its four control values and a scene reflecting those settings.",
    "short_label": "VOICE 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "292",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L292"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_global",
    "gesture": "shows",
    "action": "Shows GLOBAL with its four control values and a scene reflecting those settings.",
    "short_label": "GLOBAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "293",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L293"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_master",
    "gesture": "shows",
    "action": "Shows MASTER with its four control values and a scene reflecting those settings.",
    "short_label": "MASTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "294",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L294"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_system",
    "gesture": "shows",
    "action": "Shows SYSTEM with its four control values and a scene reflecting those settings.",
    "short_label": "SYSTEM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "295",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L295"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_arp",
    "gesture": "shows",
    "action": "Shows ARP with its four control values and a scene reflecting those settings.",
    "short_label": "ARP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L301"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_arp_2",
    "gesture": "shows",
    "action": "Shows ARP 2 with its four control values and a scene reflecting those settings.",
    "short_label": "ARP 2",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "302",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L302"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "page_pattern",
    "gesture": "shows",
    "action": "Shows PATTERN with its four control values and a scene reflecting those settings.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "304",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L304"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "526-540",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L526-L540"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "276-290",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L276-L290"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "village",
    "gesture": "shows",
    "action": "Shows village activity with tempo and track controls.",
    "short_label": "VILLAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_town.c",
      "lines": "667-686",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_town.c#L667-L686"
     }
    ]
   },
   {
    "mode": "party_view",
    "gesture": "shows",
    "action": "Shows the party’s movement and musical activity.",
    "short_label": "PARTY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "396-402",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L396-L402"
     }
    ]
   },
   {
    "mode": "boss_view",
    "gesture": "shows",
    "action": "Shows the boss and rhythm activity.",
    "short_label": "BOSS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "294-309",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L294-L309"
     }
    ]
   },
   {
    "mode": "live_record",
    "gesture": "shows",
    "action": "Shows the campfire and the track being recorded.",
    "short_label": "RECORD CAMP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "378-402",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L378-L402"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "shows",
    "action": "Shows sound cards for the selected hero, preview status and copy guidance.",
    "short_label": "SOUNDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "705-759",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L705-L759"
     }
    ]
   },
   {
    "mode": "party_menu",
    "gesture": "shows",
    "action": "Shows the four hero cards and their class choices.",
    "short_label": "HERO CARDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "995-1046",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L995-L1046"
     }
    ]
   },
   {
    "mode": "status",
    "gesture": "shows",
    "action": "Shows the selected hero’s status and musical settings.",
    "short_label": "HERO STATUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "1048-1115",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L1048-L1115"
     }
    ]
   },
   {
    "mode": "filter_menu",
    "gesture": "shows",
    "action": "Shows the available scene filters and the preview.",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "762-798",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L762-L798"
     }
    ]
   },
   {
    "mode": "led_menu",
    "gesture": "shows",
    "action": "Shows the LED effect, speed, fade and repeat choice.",
    "short_label": "KEY LIGHTS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "800-833",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L800-L833"
     }
    ]
   },
   {
    "mode": "importer",
    "gesture": "shows",
    "action": "Shows imported sample and training-song slots with erase-hold progress.",
    "short_label": "FILES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "864-924",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L864-L924"
     }
    ]
   },
   {
    "mode": "game_choice",
    "gesture": "shows",
    "action": "Shows Piano Hero and FM Hero game cards.",
    "short_label": "GAMES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "1024-1055",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L1024-L1055"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "shows",
    "action": "Shows six song cards and an add-file card for the selected game.",
    "short_label": "SONGS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "1087-1118",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L1087-L1118"
     }
    ]
   },
   {
    "mode": "game_import_help",
    "gesture": "shows",
    "action": "Shows how to add a song from the browser by USB.",
    "short_label": "UPLOAD HELP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "1087-1118",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L1087-L1118"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "shows",
    "action": "Shows a note chart that waits for matching note names, plus hits and combo.",
    "short_label": "PIANO HERO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "1119-1145",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L1119-L1145"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "868-910",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L868-L910"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "shows",
    "action": "Shows the four moving lanes, hits, misses and combo.",
    "short_label": "FM HERO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "1119-1145",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L1119-L1145"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "868-910",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L868-L910"
     }
    ]
   },
   {
    "mode": "game_result",
    "gesture": "shows",
    "action": "Shows the practice score and performance statistics.",
    "short_label": "RESULT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "1148-1158",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L1148-L1158"
     }
    ]
   },
   {
    "mode": "unlock_banner",
    "gesture": "shows",
    "action": "Shows the first-boss unlock notice until HOME dismisses it or its timer ends.",
    "short_label": "UNLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_boss.c",
      "lines": "571-598",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L571-L598"
     }
    ]
   },
   {
    "mode": "ultimate",
    "gesture": "shows",
    "action": "Shows the hero’s ultimate animation in a band or full screen; buttons do not skip it.",
    "short_label": "ULTIMATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_boss.c",
      "lines": "630-655",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L630-L655"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_boss.c",
      "lines": "686-705",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L686-L705"
     }
    ]
   },
   {
    "mode": "save_user",
    "gesture": "shows",
    "action": "Shows the user slot and load, erase and save actions.",
    "short_label": "USER SOUNDS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "298-300",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L298-L300"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "save_tools",
    "gesture": "shows",
    "action": "Shows clear-pattern, initialize-sound and new-project actions.",
    "short_label": "TOOLS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "298-300",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L298-L300"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "271-301",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L271-L301"
     }
    ]
   },
   {
    "mode": "support_perc",
    "gesture": "shows",
    "action": "Shows the hero’s existing synth identity even when its live keys have a percussion assignment; keep that original choice separately because it is absent from saved projects and sounds.",
    "short_label": "PERCUSSION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_draw.c",
      "lines": "124-135",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_draw.c#L124-L135"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "160-162",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L160-L162"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/project.c",
      "lines": "27-41",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L27-L41"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/upreset.c",
      "lines": "22-32",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/upreset.c#L22-L32"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "shows",
    "action": "Shows the roll targets, repeat rate and recent arp-note strip.",
    "short_label": "NOTE REPEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "505-545",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L505-L545"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_screens.c",
      "lines": "624-640",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L624-L640"
     }
    ]
   },
   {
    "mode": "layer_steps_held",
    "gesture": "shows",
    "action": "Shows held-step level and ratchet controls; KNOB 4 still edits length even when its legend is blank.",
    "short_label": "STEP VALUES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "591-608",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L591-L608"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_layers.c",
      "lines": "351-371",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_layers.c#L351-L371"
     }
    ]
   },
   {
    "mode": "page_drum_rack",
    "gesture": "shows",
    "action": "Shows Drum Rack with drum MIDI channel, level, reverb and pads that respond to drum hits.",
    "short_label": "DRUM RACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/params.c",
      "lines": "296",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/params.c#L296"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "35-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L35-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_stock.c",
      "lines": "161-170",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_stock.c#L161-L170"
     }
    ]
   }
  ]
 },
 "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "stopped",
    "gesture": "off",
    "action": "Dark while the transport is stopped.",
    "short_label": "STOPPED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "lit",
    "action": "Lights while choosing a training song, where either button starts it.",
    "short_label": "READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "217-218",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L217-L218"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "rec_ready",
    "gesture": "blinking",
    "action": "Blinks while armed.",
    "short_label": "ARMED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "219-220",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L219-L220"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "219-220",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L219-L220"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "219-220",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L219-L220"
     }
    ]
   }
  ],
  "button_home": [
   {
    "mode": "tracks",
    "gesture": "lit",
    "action": "Lit while the TRACKS screen shows.",
    "short_label": "TRACKS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-198",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L198"
     }
    ]
   },
   {
    "mode": "layer_fx",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "flash",
    "action": "A fading chase moves across these six buttons with the selected hero’s notes, or dimly on beats while it is silent.",
    "short_label": "NOTE CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "201-215",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L201-L215"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-198",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L198"
     }
    ]
   },
   {
    "mode": "layer_key",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "flash",
    "action": "A fading chase moves across these six buttons with the selected hero’s notes, or dimly on beats while it is silent.",
    "short_label": "NOTE CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "201-215",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L201-L215"
     }
    ]
   },
   {
    "mode": "game_song",
    "gesture": "lit",
    "action": "Lights while choosing a training song, where either button starts it.",
    "short_label": "READY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "217-218",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L217-L218"
     }
    ]
   },
   {
    "mode": "sound_picker",
    "gesture": "lit",
    "action": "Lights while the sound picker is open to mark SEL as the copy control.",
    "short_label": "COPY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "218",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L218"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-198",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L198"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "flash",
    "action": "A fading chase moves across these six buttons with the selected hero’s notes, or dimly on beats while it is silent.",
    "short_label": "NOTE CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "201-215",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L201-L215"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-198",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L198"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "flash",
    "action": "A fading chase moves across these six buttons with the selected hero’s notes, or dimly on beats while it is silent.",
    "short_label": "NOTE CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "201-215",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L201-L215"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-198",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L198"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "flash",
    "action": "A fading chase moves across these six buttons with the selected hero’s notes, or dimly on beats while it is silent.",
    "short_label": "NOTE CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "201-215",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L201-L215"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-198",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L198"
     }
    ]
   },
   {
    "mode": "layer_mix",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "playing",
    "gesture": "flash",
    "action": "A fading chase moves across these six buttons with the selected hero’s notes, or dimly on beats while it is silent.",
    "short_label": "NOTE CHASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "201-215",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L201-L215"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-198",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L198"
     }
    ]
   },
   {
    "mode": "layer_roll",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-198",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L198"
     }
    ]
   },
   {
    "mode": "layer_steps",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "28-38",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L28-L38"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-198",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L198"
     }
    ]
   },
   {
    "mode": "layer_song",
    "gesture": "lit",
    "action": "Lit while its layer is held.",
    "short_label": "HELD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "layer_locked",
    "gesture": "blinking",
    "action": "Blinks while its layer is locked open.",
    "short_label": "LOCKED",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   },
   {
    "mode": "song_screen",
    "gesture": "lit",
    "action": "Lit on the SONG screen.",
    "short_label": "SONG",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "197-200",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L197-L200"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "synth_play",
    "gesture": "lit",
    "action": "Lit while the octave is below 0.",
    "short_label": "OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "221-227",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L221-L227"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Lit while held (ghost hits).",
    "short_label": "GHOST",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "221-227",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L221-L227"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "synth_play",
    "gesture": "lit",
    "action": "Lit while the octave is above 0.",
    "short_label": "OCT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "221-227",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L221-L227"
     }
    ]
   },
   {
    "mode": "drum_play",
    "gesture": "lit",
    "action": "Lit while held (hard hits).",
    "short_label": "HARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "221-227",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L221-L227"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "55-73",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L55-L73"
     }
    ]
   },
   {
    "mode": "synth_play",
    "gesture": "lit",
    "action": "Keys held on the synth keyboard are lit.",
    "short_label": "NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "138-141",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L138-L141"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/panel.c",
      "lines": "79-80",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L79-L80"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "107-119",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L107-L119"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "121-124",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L121-L124"
     }
    ]
   },
   {
    "mode": "layer_erase",
    "gesture": "lit",
    "action": "Drum track: the keys of sounds the pattern holds are lit, plus keys held.",
    "short_label": "IN PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "133-134",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L133-L134"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "105-106",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L105-L106"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Pressed keys fade after release and can send waves, bursts, rain, comet or fireworks across the keys and buttons according to KEYBOARD LED settings.",
    "short_label": "KEY EFFECT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "228-332",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L228-L332"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_menu.c",
      "lines": "299-309",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L299-L309"
     }
    ]
   },
   {
    "mode": "piano_game",
    "gesture": "lit",
    "action": "The next chart note lights near its arrival, with matching notes in other octaves shown dimly.",
    "short_label": "NEXT NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "930-944",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L930-L944"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "228",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L228"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "333-338",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L333-L338"
     }
    ]
   },
   {
    "mode": "fm_game",
    "gesture": "lit",
    "action": "The next lane’s repeating keys light near its arrival, with every fourth key as a dim guide.",
    "short_label": "NEXT LANE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_quest_pages.c",
      "lines": "930-944",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L930-L944"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "228",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L228"
     },
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "333-338",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L333-L338"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "165-172",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L165-L172"
     }
    ]
   },
   {
    "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "125-132",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L125-L132"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "165-172",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L165-L172"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "165-172",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L165-L172"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "165-172",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L165-L172"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "125-132",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L125-L132"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "125-132",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L125-L132"
     }
    ]
   }
  ],
  "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": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "125-132",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L125-L132"
     }
    ]
   }
  ],
  "led_g5": [
   {
    "mode": "layer_mix",
    "gesture": "flash",
    "action": "Flashes on the beat.",
    "short_label": "BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "hericdk/fm1-quest",
      "ref": "quest-38",
      "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
      "path": "firmware/src/ui_input.c",
      "lines": "125-132",
      "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L125-L132"
     }
    ]
   }
  ]
 },
 "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"
  ]
 },
 "firmware": "FM1 Quest",
 "slug": "fm1quest",
 "author": "Hericdk; based on SLOOP by isod89 and Felucca by Leo Kuroshita (Hügelton Instruments)",
 "repo": "https://github.com/hericdk/fm1-quest",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "quest-38",
 "mapped_commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
 "release_date": "2026-10-12",
 "date_mapped": "2026-10-17",
 "status": "Independently checked: zero errors in round 4 (2026-10-17). No device testing.",
 "turns_it_into": "A four-track groovebox with adventure scenes, character sound browsing and two music practice games.",
 "docs": [
  {
   "title": "README.md",
   "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/README.md",
   "words": 1068,
   "read_at": "quest-38"
  },
  {
   "title": "docs/SLOOP.md",
   "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/docs/SLOOP.md",
   "words": 7605,
   "read_at": "quest-38"
  },
  {
   "title": "web/EDITOR_PROTOCOL.md",
   "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/web/EDITOR_PROTOCOL.md",
   "words": 4101,
   "read_at": "quest-38"
  },
  {
   "title": "LICENSING.md",
   "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/LICENSING.md",
   "words": 549,
   "read_at": "quest-38"
  }
 ],
 "install": {
  "official": "https://github.com/hericdk/fm1-quest/releases/tag/quest-38",
  "hub": "https://thefirmwarehub.com/",
  "installer": "https://fm1.quest/",
  "hub_note": "FM1 Quest is listed in the community hub catalogue as version 38, added 2026-10-18."
 },
 "part_id_notes": "SEL is B_SCL in the source; keys run F3 to G5, with white keys numbered 1–16 from the left; hero order on the normal ALGORITHM control is drums, synth 1, synth 2, synth 3; a more specific mode overrides a general entry, menu handlers consume buttons and encoders unless an entry says otherwise, and locked layers retain their held-layer jobs; light ids follow the checked maps, with button LEDs under lights.button_* and key LEDs under lights.led_<pitch>. Instrument and page states combine; the specific page, menu or held-layer action takes precedence over ordinary playing.",
 "disagreements": [
  {
   "topic": "Controls inherited from SLOOP",
   "docs_say": "README presents SLOOP’s musical controls as unchanged.",
   "source_says": "The README already documents the PLAY-hold picker and hero order; the remaining undocumented differences are an ordinary PLAY tap acting on release and the octave-button effects reset.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "README.md",
    "lines": "47-49",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/README.md#L47-L49"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_input.c",
    "lines": "915-936",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L915-L936"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "915-936",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L915-L936"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_input.c",
     "lines": "820-832",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_input.c#L820-L832"
    }
   ]
  },
  {
   "topic": "The inherited HOME settings guide",
   "docs_say": "The bundled SLOOP guide describes colour, zoom, light options and hardware calibration in HOME.",
   "source_says": "Quest exposes a different fifteen-item menu and has no reachable calibration handler at this release.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "docs/SLOOP.md",
    "lines": "138",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/docs/SLOOP.md#L138"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_menu.c",
    "lines": "5-6",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L5-L6"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "5-6",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L5-L6"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "389-468",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L389-L468"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/main.c",
     "lines": "204-218",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/main.c#L204-L218"
    }
   ]
  },
  {
   "topic": "Preservation when switching",
   "docs_say": "README broadly says saved projects, sounds, samples and settings are kept.",
   "source_says": "Quest keeps its own records, but current SLOOP projects are unreadable, its settings have changed meanings, later sample headers are displaced and automatic writes can replace foreign work.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "README.md",
    "lines": "19",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/README.md#L19"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/project.c",
    "lines": "221-229",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L221-L229"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/project.c",
     "lines": "221-229",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L221-L229"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/project.c",
     "lines": "462-497",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L462-L497"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/panel.c",
     "lines": "64-122",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L64-L122"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_sample.c",
     "lines": "36-45",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L36-L45"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/project.c",
     "lines": "383-397",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L383-L397"
    }
   ]
  },
  {
   "topic": "Imported sample capacity",
   "docs_say": "The protocol guide still describes three samples with 80 KiB allocated to each.",
   "source_says": "Quest allocates 64 KiB per sample, leaving up to 65,024 bytes for sample data; the freed area holds training songs.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "web/EDITOR_PROTOCOL.md",
    "lines": "99",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/web/EDITOR_PROTOCOL.md#L99"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/eng_sample.c",
    "lines": "36-78",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L36-L78"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/eng_sample.c",
     "lines": "36-78",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L36-L78"
    }
   ]
  },
  {
   "topic": "Backup editor location and scope",
   "docs_say": "README points to an editor directory that is absent in this tree and describes one-file backup broadly.",
   "source_says": "The editor is web/editor.html; its standard backup reads music, settings, sounds and samples but excludes all twelve training songs.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "README.md",
    "lines": "43",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/README.md#L43"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/editor.c",
    "lines": "436-466",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/editor.c#L436-L466"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/editor.c",
     "lines": "436-466",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/editor.c#L436-L466"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "web/editor.html",
     "lines": "1260-1282",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/web/editor.html#L1260-L1282"
    }
   ]
  },
  {
   "topic": "Sound preview button in source commentary",
   "docs_say": "A comment describes OCT+ as the preview transport button.",
   "source_says": "PLAY restarts the preview; OCT+ has no sound-picker action.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_menu.c",
    "lines": "7-8",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L7-L8"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_menu.c",
    "lines": "313-358",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L358"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "313-358",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L313-L358"
    }
   ]
  },
  {
   "topic": "Ultimate skip in source commentary",
   "docs_say": "A source comment describes skipping the ultimate with a button.",
   "source_says": "The implementation makes the animation unskippable.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_quest_boss.c",
    "lines": "603",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L603"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_quest_boss.c",
    "lines": "630-655",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L630-L655"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_boss.c",
     "lines": "630-655",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L630-L655"
    }
   ]
  },
  {
   "topic": "FM Hero lanes in source commentary",
   "docs_say": "An introduction to the game drawing describes five lanes and ordinary key sounds.",
   "source_says": "FM Hero uses four repeating lanes; active games suppress ordinary synth-note input and trigger the matched chart pitch, while a selected drum hero also retains its drum-key path.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_quest_pages.c",
    "lines": "802-804",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L802-L804"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_quest_pages.c",
    "lines": "828-844",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "828-844",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L828-L844"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "892-899",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L892-L899"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "781-784",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L784"
    }
   ]
  },
  {
   "topic": "Sound picker copy and cancel claims",
   "docs_say": "The picker commentary describes keeping the highlighted sound and restoring the old sound on exit.",
   "source_says": "For a user sound, SEL reapplies its engine’s first factory preset; cancellation restores the snapshot only if the highlighted index changed, so browsing away and back can lose earlier sound edits.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_menu.c",
    "lines": "7-8",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L7-L8"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_menu.c",
    "lines": "169-180",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L169-L180"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "169-180",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L169-L180"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_menu.c",
     "lines": "340-354",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_menu.c#L340-L354"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/upreset.c",
     "lines": "253-260",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/upreset.c#L253-L260"
    }
   ]
  },
  {
   "topic": "Game key silence on the drum hero",
   "docs_say": "The game introduction describes special game input replacing ordinary key sound.",
   "source_says": "Only the synth-note input path checks game suppression; a selected drum hero still triggers its normal drum key, including wrong game presses.",
   "docs_ref": {
    "kind": "doc",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_quest_pages.c",
    "lines": "802-804",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L802-L804"
   },
   "source_ref": {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/seq.c",
    "lines": "781-786",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L786"
   },
   "source": [
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "781-786",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L781-L786"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/seq.c",
     "lines": "1012-1025",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/seq.c#L1012-L1025"
    },
    {
     "kind": "source",
     "repo": "hericdk/fm1-quest",
     "ref": "quest-38",
     "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
     "path": "firmware/src/ui_quest_pages.c",
     "lines": "892-899",
     "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_pages.c#L892-L899"
    }
   ]
  }
 ],
 "switching_note": {
  "kept_on_unit": "Quest keeps the working four-track loop by autosave, four saved project sections, 32 user sounds, three imported sample sets and its settings and song order; twelve training-song slots are stored separately. Autosave waits for stopped playback, silent voices, no menu or recording arm, 2.5 s without input and at least 20 s between attempts; a first idle session can save defaults without an edit. Live section stores wait until stopped, silent and idle before flash. First visiting the boss view, game progress, recording preferences, clock choice and closing HOME can write settings without a SAVE press, even after opening the menu without editing; queued option changes can save while the menu remains open. From the flash atlas: install (package loader): Erases, programs and verifies changed application sectors at 0x04000–0x92FFF, preserving the first 16 KiB boot area. This overlaps M-VAVE Open saved projects, settings, transaction staging and the beginning of its sample bank. This leaves the whole sample bank unreadable. The same program writes can also leave PIGEON’s whole sample bank unreadable (the supplied loader accepts the device key, flash chip and package). normal startup cleanup: Erases all five sectors only if one of the two inspected header ranges contains non-erased bytes; it does not validate ownership. Non-erased data elsewhere, including a restore journal at 0xE1000 alone, does not trigger cleanup (any non-blank byte in the first four bytes at 0xE0000 or first eight bytes at 0xE4F00). incoming update or update failure: An incoming update erases five staging sectors, then writes its loader and update record; failure cleanup erases the same area (a host update request or an update failure). loader post-install marker cleanup: Checks each sector trailer and erases only a matching update record, never the whole scan range. Saved projects and sound records end before the sector trailer; sample data is not an update record. The stock record location is reported from the base atlas, not tested on a unit (After an install, erase 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 these are the family staging-record sector 0xE4000 and, on a first install from stock, stock's record sector 0xE8000. Saved music does not hold that record and is not at risk from this cleanup. This loader does not skip 0x97000–0xDFFFF). first install from stock (conditional leftover-record cleanup): Checks each sector trailer and erases only a matching update record, never the whole scan range. Saved projects and sound records end before the sector trailer; sample data is not an update record. The stock record location is reported from the base atlas, not tested on a unit (After an install, erase 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 these are the family staging-record sector 0xE4000 and, on a first install from stock, stock's record sector 0xE8000. Saved music does not hold that record and is not at risk from this cleanup. This loader does not skip 0x97000–0xDFFFF) [reported]. What FM1 Quest writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over FM1 Quest's is in when_you_leave.",
  "lost": "Current SLOOP v2.7.1 music is not read; its settings prefix loads with changed option meanings and later settings fields are lost at a Quest settings save. Older SLOOP 2.3 music and supported user sounds can be read, but sample slots 2 and 3 moved and slot 1 must fit Quest’s smaller capacity. Going back to another version does not reverse any writes; restore a backup with the firmware that made it. Quest’s training songs and appearance choices are not part of another firmware’s music format. Back up before switching. See the switching advice in this section. From the flash atlas: Other firmwares reading FM1 Quest's data: Felucca lists FM1 Quest's user sounds U01–U16; user sounds U17–U32; sample USR1, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage); Rainbow Mode lists FM1 Quest's user sounds U01–U16; user sounds U17–U32; sample USR1, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage); Felucca [Salt] lists FM1 Quest's user sounds U01–U16; user sounds U17–U32; sample USR1, but plays them differently (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt; Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage); WaveLoop FM-1 lists FM1 Quest's user sounds U01–U16; user sounds U17–U32; sample USR1, but plays them differently (Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS; Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage); SLOOP 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 replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy; Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy; Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy); SLOOP lists FM1 Quest's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP reads and uses FM1 Quest's sample USR1 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it); 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); SLOOP DX7 Banks takes over FM1 Quest's settings, panel mapping, song order and Quest preferences/progress; song section A; song section B; song section C; song section D; working music (autosave), converting them (Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up; Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy; Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy); SLOOP DX7 Banks lists FM1 Quest's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); SLOOP DX7 Banks reads and uses FM1 Quest's sample USR1 (Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP Floyd FM takes over FM1 Quest's settings, panel mapping, song order and Quest preferences/progress, converting them (Saving settings removes Quest’s light options and changes its game progress and preferences. Song order and calibration still load. This saved copy does not back up Quest’s settings); SLOOP Floyd FM reads and uses FM1 Quest's song section A; song section B; song section C; song section D; working music (autosave); sample USR1 (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine; Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops); SLOOP Floyd FM lists FM1 Quest's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); JIANT takes over FM1 Quest's user sounds U01–U16; user sounds U17–U32, converting them (JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept); ChoralRoot lists FM1 Quest's user sounds U01–U16; user sounds U17–U32, 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 FM1 Quest's user sounds U01–U16; user sounds U17–U32, but plays them differently; GHOULBOX reads and uses FM1 Quest's sample USR1; fm1-chord takes over FM1 Quest's user sounds U01–U16; user sounds U17–U32, converting them (Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered); fm1-chord reads and uses FM1 Quest's sample USR1 (Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored); MAKU reads and uses FM1 Quest's user sounds U01–U16; user sounds U17–U32; sample USR1 (MAKU leaves these sample bytes in place, but its controls use built-in material; these uploaded samples are not available to play here); Jangada reads and uses FM1 Quest's sample USR1; Skiff lists FM1 Quest's user sounds U01–U16; user sounds U17–U32, but plays them differently (The same saved sound format does not guarantee the same sound or pattern playback); Skiff reads and uses FM1 Quest's sample USR1 (Skiff uses its own sound engines, so saved loops or slices can play differently); Hortator lists FM1 Quest's sample USR1, but plays them differently (Hortator uses its own one-shot sound engines, so saved loops and slices play differently); ORBIT 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; user sounds U01–U16; user sounds U17–U32; working music (autosave), converting them (Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings; Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different; Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play); ORBIT reads and uses FM1 Quest's sample USR1 (Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots); PIGEON reads and uses FM1 Quest's sample USR1 (Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots); winampFM Synth 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 (Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings; Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); winampFM Synth lists FM1 Quest's user sounds U01–U16; user sounds U17–U32, but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things); winampFM Synth reads and uses FM1 Quest's sample USR1 (Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots); FM1 Move lists FM1 Quest's user sounds U01–U16; user sounds U17–U32; working music (autosave), but plays them differently (Shared older sounds may play differently because engines or sound controls mean different things; Only the working project is imported. It may play differently. Saved SLOOP sections are not imported); FM1 Move reads and uses FM1 Quest's sample USR1 (Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots); X0X lists FM1 Quest's sample USR1, but plays them differently (Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. Only its first sample slot starts where X0X expects one. Sending an X0X sample longer than Quest’s sample slot to the FM-1 also writes over the start of Quest’s second sample slot); 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.. What FM1 Quest reads of other firmwares' data: FM1 Quest reads and uses Felucca's user sample slot USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest reads and uses GHOULBOX's user sample slot USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest takes over Hortator's settings and panel calibration, converting them; FM1 Quest reads and uses Hortator's user samples USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest reads and uses Skiff's user sample USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest takes over SLOOP's settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites, converting them (Saving settings removes SLOOP’s drum kits, learned MIDI controls, theme and favourites from that saved copy. Quest can read SLOOP’s saved playing options as game preferences or progress); FM1 Quest reads and uses SLOOP's user sounds U01-U16; user sounds U17-U32; user sample slot USR1 (FM6, PHYS and NOISE sounds stay hidden in Quest. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them; USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest reads and uses X0X's break loops slot 1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); 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); FM1 Quest reads and uses Rainbow Mode's User sample USR1 and any slice positions you set in SLICE (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest reads and uses MAKU's inherited user sample 1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest reads and uses fm1-chord's uploaded sample USR1 and optional SLICE markers (USR1 plays only if its audio and zones fit Quest’s smaller sample slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest takes over SLOOP DX7 Banks's settings, calibration, song order, synthesized drum kits and DX-bank setup, converting them (A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings); FM1 Quest lists SLOOP DX7 Banks's user sounds 1–16; user sounds 17–32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); FM1 Quest reads and uses SLOOP DX7 Banks's user sample USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest reads and uses Jangada's user samples USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest reads and uses WaveLoop FM-1's user sample USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest takes over ORBIT's settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences, converting them (A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress); FM1 Quest reads and uses ORBIT's sample slot USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest lists SLOOP Floyd FM's settings, panel calibration and song order; song section A; song section B; song section C; song section D; user sounds U01–U16; user sounds U17–U32; working loop kept by autosave, but plays them differently (Quest uses the old zoom choice for game options. Calibration and song order load. Changing Quest’s game options can change the zoom choice when you return; Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice; Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. Floyd’s FLOYD sounds stay hidden); FM1 Quest reads and uses SLOOP Floyd FM's user sample slot USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest takes over winampFM Synth's settings, panel calibration, song order, SYN kits and MIDI, converting them (A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress); FM1 Quest lists winampFM Synth's user sounds 1-16; user sounds 17-32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); FM1 Quest reads and uses winampFM Synth's sample USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest 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); FM1 Quest lists Felucca [Salt]'s user sounds U01-U16; user sounds U17-U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); FM1 Quest reads and uses Felucca [Salt]'s user sample USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest reads and uses PIGEON's user sample USR1 in the older format (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here); FM1 Quest lists FM1 Move's user sounds U01–U16; user sounds U17–U32, but plays them differently (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); FM1 Quest reads and uses FM1 Move's sample slot USR1 (USR1 plays only if its audio and zones fit Quest’s 64 KiB slot. Sending into or erasing USR1 replaces it, including holding REC on a readable USR1 in IMPORTER. Sending into or erasing USR2 can damage the end of the old USR1. Extra slice markers are not used here). Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "Connect the running Quest to its browser editor and use Backup to download working music, all four sections, settings, both user sound banks and all three sample sets; this reads the unit. Restore writes only objects included in the file, skips absent objects and clears an included slot only when the file explicitly marks it empty; the working loop is applied in memory and can autosave later. Training songs are excluded, so keep the original MIDI files and reimport them; support-hero percussion assignments are also absent from saved projects and backups, so choose those again after restarting. Keep a backup from each firmware before switching or downgrading.",
  "overwrites_foreign": "See the switching advice in this section. Back up with the firmware that made the work before installing or first starting Quest, and before switching away. Other firmwares can overwrite Quest’s saved work at startup or during ordinary use, without a save action. One surviving copy is not a backup, and undo cannot recover flash data written by another firmware. Polly’s backup excludes its optional QY70 style bank; keep the original style-bank file separately.",
  "foreign_work_at_risk": [
   {
    "firmware": "Stock V15",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "Baud Girl FM-1+VA",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "Felucca",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "SLOOP",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "X0X",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "JIANT",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "Melodee",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "FoMni",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "AMB-1",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "ChoralRoot",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "GHOULBOX",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "M-VAVE FM-1 Open",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "FM-106",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "Hortator",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "OberVave",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "Polly",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "Skiff",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "sloopDX",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "Rainbow Mode",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "DUELL",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "FiMba-1",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "MAKU",
    "what": "See the switching advice in this section for the affected saved work."
   },
   {
    "firmware": "Fart Machine One",
    "what": "See the switching advice in this section for the affected saved work."
   }
  ],
  "source": [
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/project.c",
    "lines": "362-417",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L362-L417"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/project.c",
    "lines": "419-514",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L419-L514"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/project.c",
    "lines": "532-543",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L532-L543"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/project.c",
    "lines": "569-622",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L569-L622"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/project.c",
    "lines": "639-715",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L639-L715"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/editor.c",
    "lines": "436-490",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/editor.c#L436-L490"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "web/editor.html",
    "lines": "1260-1338",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/web/editor.html#L1260-L1338"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ota.c",
    "lines": "393-407",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ota.c#L393-L407"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/loader/ldr_core.c",
    "lines": "91-176",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/loader/ldr_core.c#L91-L176"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/eng_sample.c",
    "lines": "36-78",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/eng_sample.c#L36-L78"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/panel.c",
    "lines": "64-122",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/panel.c#L64-L122"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_quest_screens.c",
    "lines": "296-298",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_screens.c#L296-L298"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/ui_quest_boss.c",
    "lines": "139-142",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/ui_quest_boss.c#L139-L142"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/editor.c",
    "lines": "863-908",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/editor.c#L863-L908"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/project.c",
    "lines": "461-486",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L461-L486"
   },
   {
    "kind": "source",
    "repo": "hericdk/fm1-quest",
    "ref": "quest-38",
    "commit": "0996503bfe83c8c2217c63b29e1be75ebbcdddaf",
    "path": "firmware/src/project.c",
    "lines": "518-530",
    "url": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/firmware/src/project.c#L518-L530"
   }
  ],
  "foreign_write_triggers": [
   {
    "trigger": "update_area",
    "what": "At startup, Quest checks only the first few bytes of each of its two update headers. If either inspected header is nonblank, it erases the update area without a question; data elsewhere in that area does not trigger cleanup on its own, so a pending Polly restore journal alone does not trigger it. Sending a firmware update, or a failed update, erases the same area. These actions can replace other firmwares’ work. See the switching advice in this section for the affected saved work."
   },
   {
    "trigger": "autosave",
    "what": "The first eligible idle autosave, even without an edit, and every later autosave can replace other firmwares’ saved work without a question. Entering update mode also flushes a changed working loop, so it has the same risks. Outside menus, the octave-button hold first resets the selected synth’s effects at 0.8 s and saves that reset at 5 s. See the switching advice in this section for the affected saved work."
   },
   {
    "trigger": "settings_write",
    "what": "Settings writes can happen on the first visit to the boss view, game progress, a HOME menu close without an edit, recording or clock changes, song-order saves, section stores, a settings restore, or an update flush. MAP ENEMIES, DAMAGE NUMBERS and BOSS SPEED queue a write immediately; stopped, silent idle time can commit it even with the menu still open. These writes ask no extra question about other firmwares’ work. See the switching advice in this section for the affected saved work."
   },
   {
    "trigger": "project_save",
    "what": "Saving a project or section, restoring an included section, or flushing a changed section after a warm reset can replace other firmwares’ work. A live section store waits until stopped, silent and idle before writing. Any panel confirmation is for the Quest operation; it does not identify or ask about other firmwares’ work. See the switching advice in this section for the affected saved work. Quest’s project and section saves, section sends and erases with computer commands, section restores and section writes after a warm reset, user-sound bank writes and sample writes can also replace ChoralRoot’s legacy sounds and patches, kept for returning to ChoralRoot 0.21 or older."
   },
   {
    "trigger": "user_sound_write",
    "what": "Saving or erasing a user sound rewrites its whole bank. The panel requires stopped playback and a second turn; editor sound STORE, PUT and ERASE and whole-bank restore write without a stopped-playback guard or a device question. See the switching advice in this section for the affected saved work.",
    "preserved_bank_condition": "An imported sound bank can retain unsupported sounds as unreadable entries while other slots are saved. Explicitly saving over such an entry replaces that sound; restoring a whole bank replaces all entries in that bank."
   },
   {
    "trigger": "sample_write",
    "what": "Receiving, restoring, importing or erasing a sample set can replace other firmwares’ work without an extra question about other firmware. Importer erasure requires its hold gesture; a host erase can clear a slot even when Quest cannot read its header. See the switching advice in this section for the affected saved work."
   },
   {
    "trigger": "training_song_write",
    "what": "Receiving or erasing a Piano Hero or FM Hero training song can replace other firmwares’ work without an extra question about other firmware. The standard Quest backup excludes training songs. See the switching advice in this section for the affected saved work."
   },
   {
    "trigger": "installer",
    "what": "Installing Quest replaces changed program sectors before the first start. See the switching advice in this section for the affected saved work. Its installer also checks for leftover update records and erases only sectors holding a valid record, without an additional overwrite question. Saved music does not hold that record.",
    "stock_record_condition": "On a first install from stock, a valid stock update record can cause an additional sector erase. The reported stock update process has already replaced that sector’s previous contents with stock’s own backup and update record; Quest’s erase can therefore remove that backup, rather than other firmwares’ work that used to be there. The stock backup location is reported rather than confirmed from stock source. Saved music does not hold that update record."
   }
  ],
  "return_trip": "Going back does not undo Quest’s writes. Once the other firmware no longer has a readable copy, it can ignore that work or load defaults; readers that choose a newer record before checking its content can also reject the replacement without retrying an older copy. Quest’s working-loop record is not an imported DX7 bank: ChoralRoot can show an empty DX7 bank when it selects that newer record, even with an older bank copy present. See the switching advice in this section for the affected saved work. X0X can reset its entire project if its settings no longer load. Newer SLOOP and sloopDX can read compatible older music, but cannot reconstruct their newer fields or other saved work that Quest replaced. Restore with the firmware that made the backup.",
  "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": "ASK",
    "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": "when you enter update mode or receive a firmware update",
        "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 restore a user-sound bank with computer commands (without asking; writes the whole bank) [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)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project slot D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user 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 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 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)"
       }
      ]
     },
     {
      "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 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 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)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest 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.",
     "FM1 Quest keeps stored but does not show user presets 17-32 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them."
    ],
    "owner_text": "At risk by itself: FM6 patches of the FM6 user presets; settings, button calibration, favourites, MIDI LEARN map. At risk when you act: project slot A; project slot B; project slot C; project slot D; user sample slot USR1; user sample slot USR2; user sample slot USR3; user presets 1-16; user presets 17-32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest 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. FM1 Quest 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": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the music in progress (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, 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 drum kits, learned MIDI controls, theme and favourites from that saved copy. Quest can read SLOOP’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 SLOOP’s drum kits, learned MIDI controls, theme and favourites from that saved copy. Quest can read SLOOP’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 SLOOP’s drum kits, learned MIDI controls, theme and favourites from that saved copy. Quest can read SLOOP’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 SLOOP’s drum kits, learned MIDI controls, theme and favourites from that saved copy. Quest can read SLOOP’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 SLOOP’s drum kits, learned MIDI controls, theme and favourites from that saved copy. Quest can read SLOOP’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 SLOOP’s drum kits, learned MIDI controls, theme and favourites from that saved copy. Quest can read SLOOP’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 SLOOP’s drum kits, learned MIDI controls, theme and favourites from that saved copy. Quest can read SLOOP’s saved playing options as game preferences or progress"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest reads user sounds U01-U16 until you write over the saved data. FM6, PHYS and NOISE sounds stay hidden in Quest. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them.",
     "FM1 Quest reads user sounds U17-U32 until you write over the saved data. FM6, PHYS and NOISE sounds stay hidden in Quest. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them."
    ],
    "owner_text": "At risk by itself: the music in progress (autosave); settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk when you act: song section A (a whole project); song section B (a whole project); song section C (a whole project); song section D (a whole project); user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds U01-U16; user sounds U17-U32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest reads user sounds U01-U16 until you write over the saved data. FM6, PHYS and NOISE sounds stay hidden in Quest. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them. FM1 Quest reads user sounds U17-U32 until you write over the saved data. FM6, PHYS and NOISE sounds stay hidden in Quest. Saving another slot keeps them. Replacing their slots or restoring the whole bank removes them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "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 user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "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 project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (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 section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (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 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 with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "break loops slot 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first."
    ],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: break loops slot 1; break loops slot 2; break loops slot 3; X0X button calibration. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "ASK",
    "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": "when you enter update mode or receive a firmware update",
        "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 restore a user-sound bank with computer commands (without asking; writes the whole bank) [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)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section A (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section B (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section C (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1 section D (a whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2: four sections (whole projects)",
      "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": "song 3: four sections (whole projects)",
      "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": "song 4: four sections (whole projects)",
      "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": "song 5: four sections (whole projects)",
      "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": "song 6: four sections (whole projects)",
      "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": "song 7: four sections (whole projects)",
      "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": "song 8: four sections (whole projects)",
      "effect": "partly lost",
      "ways": [
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "which song is current, every song's rows and scenes",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM1 Quest 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.",
     "FM1 Quest keeps stored but does not show user sounds U17-U32 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them."
    ],
    "owner_text": "At risk by itself: FM6 patches for the FM6 user sounds; settings, calibration, favourites, MENU options. At risk when you act: song 1 section A (a whole project); song 1 section B (a whole project); song 1 section C (a whole project); song 1 section D (a whole project); song 2: four sections (whole projects); song 3: four sections (whole projects); song 4: four sections (whole projects); song 5: four sections (whole projects); song 6: four sections (whole projects); song 7: four sections (whole projects); song 8: four sections (whole projects) (partly lost); which song is current, every song's rows and scenes; user sounds U01-U16; user sounds U17-U32. FM1 Quest 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. FM1 Quest 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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "shared user presets U109-U126",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U289-U378",
      "effect": "partly lost",
      "ways": [
       {
        "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 project A (asks first or waits for you to turn again)",
        "effect": "partly lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "partly lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "partly lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you save the current music as section C (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 restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A: patterns, song, sounds, motion, recordings",
      "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": "project B: patterns, song, sounds, motion, recordings",
      "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": "project C: patterns, song, sounds, motion, recordings",
      "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": "project D: patterns, song, sounds, motion, recordings",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "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": "shared user presets U145-U288",
      "effect": "partly lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 send a sample from the editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "shared user presets U073-U090",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U091-U108",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U019-U036",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (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; settings, factory favourites, calibration, saved template. At risk when you act: shared user presets U289-U378 (partly lost); shared user presets U379-U384; project A: patterns, song, sounds, motion, recordings; project B: patterns, song, sounds, motion, recordings; project C: patterns, song, sounds, motion, recordings; project D: patterns, song, sounds, motion, recordings; shared user presets U145-U288 (partly lost); shared user presets U073-U090; shared user presets U091-U108; 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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FoMni button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FoMni setup (pages, chord buttons, lights). At risk when you act: FoMni button calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "AMB-1 panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "32 imported DX7 voices",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "CZ-1 bank A (16 tones)",
      "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": "CZ-1 bank B (16 tones)",
      "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": "CZ-1 bank C (16 tones)",
      "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": "CZ-1 bank D (16 tones)",
      "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": "CZ-1 bank E (16 tones)",
      "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": "CZ-1 bank F (16 tones)",
      "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": "CZ-1 bank G (16 tones)",
      "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": "CZ-1 bank H (16 tones)",
      "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": "last session saved with a global save",
      "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": "favourite marks, chord/bass type and filter",
      "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": "128 saved sounds with their complete engine patches",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 send a sample from the editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "recorded loop 1",
      "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": "recorded loop 2",
      "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": "recorded loop 3",
      "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": "recorded loop 4",
      "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": "recorded loop 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "recorded loop 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: 32 imported DX7 voices; options, playing setup and panel calibration. At risk when you act: CZ-1 bank A (16 tones); CZ-1 bank B (16 tones); CZ-1 bank C (16 tones); CZ-1 bank D (16 tones); CZ-1 bank E (16 tones); CZ-1 bank F (16 tones); CZ-1 bank G (16 tones); CZ-1 bank H (16 tones); last session saved with a global save; favourite marks, chord/bass type and filter; 128 saved sounds with their complete engine patches (some or all lost); recorded loop 1; recorded loop 2; recorded loop 3; recorded loop 4; recorded loop 5; recorded loop 6; recorded loop 7; recorded loop 8; recorded loop 9; recorded loop 10.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 patches for user sounds",
      "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 restore a backup from the editor (the computer asks once before restoring the whole backup) [uses its preset bank]",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank) [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)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank) [uses its preset bank]",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you 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 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)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest 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.",
     "FM1 Quest keeps stored but does not show user sounds 17–32 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them."
    ],
    "owner_text": "At risk by itself: FM6 patches for user sounds; settings and panel calibration. At risk when you act: project A; project B; project C; project D; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds 1–16; user sounds 17–32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest 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. FM1 Quest 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 if the checked parts at the start of the firmware update tool or in its saved update progress contain data",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you receive a firmware update",
        "effect": "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 user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "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 project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (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 section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (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 sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send 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 training song H1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings 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 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 project B (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 section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: octave, last selected preset and MIDI preferences. At risk when you act: older stored user bank, if present (Beta4 does not store new edits).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you press SAVE on the SONG screen (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 section A from SONG (without asking)",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "changed to the new format: After the new firmware saves its settings, returning to Hortator uses defaults for settings, control calibration and the remembered Bluetooth device"
       },
       {
        "way": "when you save section D from SONG (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 with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first."
    ],
    "owner_text": "At risk by itself: settings and panel calibration. At risk when you act: project A; project B; project C; project D; user samples USR1; user samples USR2; user samples USR3. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings 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": "when you enter update mode with settings waiting to be saved [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 SAVE on the SONG screen (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 section A from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section D from SONG (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 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": "when you enter update mode with settings waiting to be saved [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 SAVE on the SONG screen (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 section A from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section D from SONG (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 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": "when you enter update mode with settings waiting to be saved [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 SAVE on the SONG screen (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 section A from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section D from SONG (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 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": "when you enter update mode with settings waiting to be saved [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 SAVE on the SONG screen (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 section A from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section D from SONG (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 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": "when you enter update mode with settings waiting to be saved [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 SAVE on the SONG screen (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 section A from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section D from SONG (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 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": "when you enter update mode with settings waiting to be saved [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 SAVE on the SONG screen (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 section A from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section D from SONG (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 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": "when you enter update mode with settings waiting to be saved [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 SAVE on the SONG screen (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 section A from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section D from SONG (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 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": "when you enter update mode with settings waiting to be saved [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 SAVE on the SONG screen (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 section A from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section B from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section C from SONG (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you save section D from SONG (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 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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Polly shared memory 4",
      "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)",
        "effect": "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": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "All four Polly songs",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly shared memory 5",
      "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": "Polly shared memory 6",
      "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": "Polly shared memory 7",
      "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": "Polly shared memory 8",
      "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": "Polly shared memory 9",
      "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": "Polly shared memory 10",
      "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": "Polly shared memory 11",
      "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": "Polly shared memory 12",
      "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": "Polly shared memory 13",
      "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": "Polly shared memory 14",
      "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": "Polly shared memory 15",
      "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": "Polly shared memory 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": "Optional QY70 style bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "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 training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Polly button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (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; Polly setup and channel sounds. At risk when you act: All four Polly songs; Polly shared memory 1; Polly shared memory 2; Polly shared memory 3; Polly shared memory 5; Polly shared memory 6; Polly shared memory 7; Polly shared memory 8; Polly shared memory 9; Polly shared memory 10; Polly shared memory 11; Polly shared memory 12; Polly shared memory 13; Polly shared memory 14; Polly shared memory 15; Polly shared memory 16; Optional QY70 style bank; 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": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds’ own FM6 patches",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings 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": "when you enter update mode or receive a firmware update [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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": "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": "when you enter update mode or receive a firmware update [uses its separate FM6 patch collection]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest 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.",
     "FM1 Quest 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; settings, calibration and favourites; user sound bank 1 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sound bank 2 (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it). At risk when you act: project A; project B; project C; project D; user sample USR1; user sample USR2; user sample USR3. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest 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. FM1 Quest keeps stored but does not show user sound bank 2 until you write over the saved data. These sounds stay hidden. Saving elsewhere in the bank keeps them; replacing their slots or restoring a whole bank removes them.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopdx",
    "name": "sloopDX",
    "flags": "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)"
   },
   {
    "from": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ASK",
    "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": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "your old FM6 bank (B1–B27)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "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": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings 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": "when you enter update mode or receive a firmware update [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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": "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": "when you enter update mode or receive a firmware update [uses its FM6 patches]",
        "effect": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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": "only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain"
     },
     {
      "object": "Project A: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project B: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project C: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Project D: four tracks and their sounds, notes, automation, song chain and name",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR1 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR2 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "User sample USR3 and any slice positions you set in SLICE",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest 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.",
     "FM1 Quest keeps stored but does not show user sounds U17–U32, names and sixteen-step patterns without automation until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: the FM6 patches used by the thirty-two user sounds; your old FM6 bank (B1–B27); Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes; user sounds U01–U16, names and sixteen-step patterns without automation (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it); user sounds U17–U32, names and sixteen-step patterns without automation (only FM6 sounds can lose their own patches and fall back to a factory patch or the initial voice; other sounds remain; other writes can also erase it). At risk when you act: Project A: four tracks and their sounds, notes, automation, song chain and name; Project B: four tracks and their sounds, notes, automation, song chain and name; Project C: four tracks and their sounds, notes, automation, song chain and name; Project D: four tracks and their sounds, notes, automation, song chain and name; User sample USR1 and any slice positions you set in SLICE; User sample USR2 and any slice positions you set in SLICE; User sample USR3 and any slice positions you set in SLICE. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest 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. FM1 Quest 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": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved patches",
      "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)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "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 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": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and panel setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M01–M02",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M03–M04",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M05–M06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M07–M08",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user wavetable USR1",
      "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": "user wavetable USR2",
      "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": "user wavetable USR3",
      "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": "multis M09–M10",
      "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": "multis M11–M12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M13–M14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "multis M15–M16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P01–P06",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P07–P12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "patterns P13–P16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved patches; settings and panel setup. At risk when you act: multis M01–M02; multis M03–M04; multis M05–M06; multis M07–M08; user wavetable USR1; user wavetable USR2; user wavetable USR3; multis M09–M10; multis M11–M12; multis M13–M14; multis M15–M16; patterns P01–P06; patterns P07–P12; patterns P13–P16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fimba",
    "name": "FiMba-1 beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (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": "ASK",
    "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": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings and calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited project D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user sample 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "inherited user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     },
     {
      "object": "inherited user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest 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.",
     "FM1 Quest keeps stored but does not show inherited user preset bank 2 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: inherited FM6 patches for user presets; settings and calibration. At risk when you act: inherited project A; inherited project B; inherited project C; inherited project D; inherited user sample 1; inherited user sample 2; inherited user sample 3; inherited user preset bank 1; inherited user preset bank 2. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest 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. FM1 Quest keeps stored but does not show inherited user preset bank 2 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "learned button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (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": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FM6 bank B1-B27",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P1: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P2: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P3: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chord preset P4: full synth project",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR1 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR2 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "uploaded sample USR3 and optional SLICE markers",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you 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 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)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest 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.",
     "FM1 Quest keeps stored but does not show user sounds 17-32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: FM6 bank B1-B27; settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: chord preset P1: full synth project; chord preset P2: full synth project; chord preset P3: full synth project; chord preset P4: full synth project; uploaded sample USR1 and optional SLICE markers; uploaded sample USR2 and optional SLICE markers; uploaded sample USR3 and optional SLICE markers; user sounds 1-16; user sounds 17-32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest 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. FM1 Quest 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": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working loop",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress. Quest reads DX7 Banks’ saved bank setup as an unlocked red warrior and keeps that unlock when saving. Returning to DX7 Banks after that settings save does not erase DX banks, unless you restore a Quest settings backup or send settings with computer commands in Quest; then returning to DX7 Banks can erase DX banks 1–2 (up to 1–4) at its first start without asking. Back up your DX banks before restoring or sending settings"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest reads user sounds 1–16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "FM1 Quest reads user sounds 17–32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: working loop; settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: section A; section B; section C; section D; user sample USR1; user sample USR2; user sample USR3; user sounds 1–16; user sounds 17–32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest reads user sounds 1–16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FM1 Quest reads user sounds 17–32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FuMi-1 sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FuMi-1 button and encoder calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (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": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user samples USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first."
    ],
    "owner_text": "At risk by itself: working music (autosave); preferences, calibration and MIDI LEARN map. At risk when you act: project 1; project 2; project 3; project 4; user samples USR1; user samples USR2; user samples USR3; user sounds U01-U16; user sounds U17-U32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ASK",
    "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": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "last session saved for the next start",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its sample]",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its sample]",
        "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": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions you set for USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its sample]",
        "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": "song 4",
      "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": "song 5",
      "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": "song 6",
      "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": "song 7",
      "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": "song 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song order and selection",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     },
     {
      "object": "user sounds 17–32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest 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.",
     "FM1 Quest keeps stored but does not show user sounds 17–32 until you write over the saved data. Your sounds stay saved but cannot be shown or played. Saving into their slots removes them; saving elsewhere keeps them. Saving on the FM-1 needs another turn of the same control, with no warning that the slot holds a hidden sound."
    ],
    "owner_text": "At risk by itself: FM6 patches and controls for each drum in user sounds; settings, calibration and favourites. At risk when you act: song 1; song 2; song 3; last session saved for the next start; user sample USR1; slice positions you set for USR1; user sample USR2; slice positions you set for USR2; song 4; song 5; song 6; song 7; song 8; song 9; song 10; song 11; song 12; song order and selection; user sounds 1–16; user sounds 17–32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest 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. FM1 Quest 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": "ASK",
    "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": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save 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 section B from SONG (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 section C from SONG (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 section D from SONG (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 music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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 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": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save 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 A from SONG (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 section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (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 section D from SONG (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 music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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 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": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save 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 A from SONG (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 section B from SONG (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 section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (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 music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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 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": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 press SAVE on the SONG screen (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save 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 A from SONG (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 section B from SONG (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 section C from SONG (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 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 separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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 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 [uses its separate samples or sound setup]",
        "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 enter update mode or receive a firmware update",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 press SAVE on the SONG screen (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 section A from SONG (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 section B from SONG (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 section C from SONG (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 section D from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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 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": "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 keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "USER sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     },
     {
      "object": "USER sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ],
      "first_way_effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first."
    ],
    "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; settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences. At risk when you act: sample slot USR1; sample slot USR2; sample slot USR3; 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). Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the working loop kept by autosave",
      "effect": "changed to the new format: When the working loop is saved automatically, its notes stay but FLOYD parts are saved as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: When the working loop is saved automatically, its notes stay but FLOYD parts are saved as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "changed to the new format: When the working loop is saved automatically, its notes stay but FLOYD parts are saved as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       }
      ]
     },
     {
      "object": "settings, panel calibration and song order",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "kept: FM1 Quest can read it"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "kept: FM1 Quest can read it"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "kept: FM1 Quest 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 section A from SONG (asks first)",
        "effect": "kept: FM1 Quest can read it"
       },
       {
        "way": "when you save section B from SONG (asks first)",
        "effect": "kept: FM1 Quest can read it"
       },
       {
        "way": "when you save section C from SONG (asks first)",
        "effect": "kept: FM1 Quest can read it"
       },
       {
        "way": "when you save section D from SONG (asks first)",
        "effect": "kept: FM1 Quest can read it"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save section A from SONG (asks first)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save the current music as section A (asks first)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "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 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: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save section B from SONG (asks first)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save the current music as section B (asks first)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "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 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: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save section C from SONG (asks first)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save the current music as section C (asks first)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "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 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: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save section D from SONG (asks first)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you save the current music as section D (asks first)",
        "effect": "changed to the new format: Saving this section keeps its notes but saves FLOYD parts as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Notes and shared controls load. FLOYD parts become ANALOG in Quest, which uses its saved sync choice. Saving again keeps those changed choices.",
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. Floyd’s FLOYD sounds stay hidden.",
     "FM1 Quest reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. Floyd’s FLOYD sounds stay hidden.",
     "FM1 Quest reads settings, panel calibration and song order until you write over the saved data. Quest uses the old zoom choice for game options. Calibration and song order load. Changing Quest’s game options can change the zoom choice when you return."
    ],
    "owner_text": "At risk by itself: the working loop kept by autosave (changed to the new format: When the working loop is saved automatically, its notes stay but FLOYD parts are saved as ANALOG. Returning to Floyd does not restore the original sound choices. Notes load, but FLOYD parts become ANALOG and Quest uses its own saved sync choice); settings, panel calibration and song order. At risk when you act: song section A; song section B; song section C; song section D; user sample slot USR1; user sample slot USR2; user sample slot USR3; user sounds U01–U16; user sounds U17–U32. Notes and shared controls load. FLOYD parts become ANALOG in Quest, which uses its saved sync choice. Saving again keeps those changed choices. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. Floyd’s FLOYD sounds stay hidden. FM1 Quest reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. Floyd’s FLOYD sounds stay hidden. FM1 Quest reads settings, panel calibration and song order until you write over the saved data. Quest uses the old zoom choice for game options. Calibration and song order load. Changing Quest’s game options can change the zoom choice when you return.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "winampfm",
    "name": "winampFM Synth",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music kept by autosave",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "changed to the new format: A settings save keeps Quest’s calibration and song-order format while dropping the source firmware’s extra drum kits, MIDI controls or theme and favourites. Quest can read saved playing options as game preferences or progress"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section A (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section B (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section C (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "section D (whole project)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds 17-32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "FM1 Quest reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: working music kept by autosave; settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: section A (whole project); section B (whole project); section C (whole project); section D (whole project); sample USR1; sample USR2; sample USR3; user sounds 1-16; user sounds 17-32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest reads user sounds 1-16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FM1 Quest reads user sounds 17-32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sixteen six-track patterns",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "some or all lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (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 project A (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "song order and four scenes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "some or all lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (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 project A (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "eight saved sampler takes",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 send a sample from the editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "twelve uploaded sounds or DX7 banks",
      "effect": "some or all lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 send a sample from the editor (the computer asks first)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "some or all lost"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "some or all lost"
       }
      ]
     },
     {
      "object": "screen language pack",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "system preferences and last pattern",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "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"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: sixteen six-track patterns (some or all lost); song order and four scenes (some or all lost). At risk when you act: eight saved sampler takes (some or all lost); twelve uploaded sounds or DX7 banks (some or all lost); screen language pack; system preferences and last pattern.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "salt",
    "name": "Felucca [Salt]",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "screen preferences, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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 (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save 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"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save section A from SONG (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save the current music as section A (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save 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"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save section B from SONG (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save the current music as section B (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save section C from SONG (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save the current music as section C (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save section D from SONG (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you save the current music as section D (asks first)",
        "effect": "changed to the new format: Once you save this section, its drum pattern and timing use the new format. SALT cannot open that saved copy"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17-U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest reads user sounds U01-U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "FM1 Quest reads user sounds U17-U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: screen preferences, calibration and favourites. At risk when you act: project 1; project 2; project 3; project 4; user sample USR1; user sample USR2; user sample USR3; user sounds U01-U16; user sounds U17-U32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest reads user sounds U01-U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FM1 Quest reads user sounds U17-U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "pigeon",
    "name": "PIGEON",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the older FM6 patch bank PIGEON no longer uses",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older FM6 patches for user presets",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode or receive a firmware update",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "preferences, MIDI LEARN and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared song and drum sample bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install FM1 Quest",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section A (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section B (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section C (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved pattern D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save project D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the current music as section D (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a section with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "slice positions set by hand in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "partly lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "partly lost"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "partly lost"
       }
      ]
     },
     {
      "object": "user sample USR1 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "chops, drum-pad and performance edits",
      "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": "user sample USR2 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sample USR3 in the older format",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "older user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     },
     {
      "object": "older user preset bank 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 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)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest 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.",
     "FM1 Quest 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: the older FM6 patch bank PIGEON no longer uses; older FM6 patches for user presets; preferences, MIDI LEARN and panel calibration. At risk when you act: shared song and drum sample bank; saved pattern A; saved pattern B; saved pattern C; saved pattern D; slice positions set by hand in the older format; user sample USR1 in the older format; chops, drum-pad and performance edits; user sample USR2 in the older format; user sample USR3 in the older format; older user preset bank 1; older user preset bank 2. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest 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. FM1 Quest 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": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "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": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings 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": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 press SAVE on the SONG screen (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 section A from SONG (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 section B from SONG (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 section C from SONG (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 section D from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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 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": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 press SAVE on the SONG screen (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 section A from SONG (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 section B from SONG (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 section C from SONG (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 section D from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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 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": "when you enter update mode with settings waiting to be saved [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase a sample 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"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (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 press SAVE on the SONG screen (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 section A from SONG (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 section B from SONG (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 section C from SONG (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 section D from SONG (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you send a sample 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"
       },
       {
        "way": "when you send or erase training song H1 (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 or erase training song H2 (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 or erase training song H3 (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 or erase training song H4 (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 or erase training song H5 (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 or erase training song H6 (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 or erase training song P1 (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 or erase training song P2 (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 or erase training song P3 (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 or erase training song P4 (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 or erase training song P5 (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 or erase training song P6 (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 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": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR1 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR2 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample slot USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase sample USR3 by holding REC on it in IMPORTER (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample with computer commands (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase training song H1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song H6 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P1 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P4 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P5 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send or erase training song P6 (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first.",
     "FM1 Quest reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "FM1 Quest reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: 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 when you act: sample slot USR1; sample slot USR2; sample slot USR3; user sounds U01–U16; user sounds U17–U32. Quest can play your saved USR1 until you write over it, if its audio and zones fit Quest’s smaller sample slot. Sending a sample to USR1 or erasing it loses the old sample. This includes holding REC on USR1 in IMPORTER when Quest can read it. Sending a sample to USR2 or erasing USR2 can damage the end of the old USR1. Back up USR1 first. FM1 Quest reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. FM1 Quest reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "Groove project slot 1",
     "Groove project slot 2",
     "Groove project slot 3",
     "Groove resume autosave",
     "Groove sound bank A",
     "Groove sound bank B",
     "Groove sound bank C",
     "Groove sound bank D",
     "Groove custom drum sounds and kits",
     "Groove device preferences",
     "Groove crash reports"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Groove OS does not publish where or how it stores saved work, so loss is possible even when shared storage cannot be found. Before switching, use export all on its Projects page to save every project and the automatically saved music. Use Save a backup on Your own sounds too. Project exports list the sounds but leave out the audio. Use Save a safety copy on Your FM-1 for the banks, songs, automatically saved music and samples. Keep these files on your computer. Sound banks, custom sounds, settings and crash reports may be lost."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Groove project slot 1; Groove project slot 2; Groove project slot 3; Groove resume autosave; Groove sound bank A; Groove sound bank B; Groove sound bank C; Groove sound bank D; Groove custom drum sounds and kits; Groove device preferences; Groove crash reports. Groove OS does not publish where or how it stores saved work, so loss is possible even when shared storage cannot be found. Before switching, use export all on its Projects page to save every project and the automatically saved music. Use Save a backup on Your own sounds too. Project exports list the sounds but leave out the audio. Use Save a safety copy on Your FM-1 for the banks, songs, automatically saved music and samples. Keep these files on your computer. Sound banks, custom sounds, settings and crash reports may be lost.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "song section A",
     "song section B",
     "song section C",
     "song section D",
     "working music (autosave)",
     "sample USR1",
     "sample USR2",
     "sample USR3",
     "Piano Hero P1",
     "Piano Hero P2",
     "Piano Hero P3",
     "Piano Hero P4",
     "Piano Hero P5",
     "Piano Hero P6",
     "FM Hero H1",
     "FM Hero H2",
     "FM Hero H3",
     "FM Hero H4",
     "FM Hero H5",
     "FM Hero H6",
     "user sounds U01–U16",
     "user sounds U17–U32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): song section A; song section B; song section C; song section D; working music (autosave); sample USR1; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; 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)"
   },
   {
    "to": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "song section A",
     "song section B",
     "song section C",
     "song section D",
     "working music (autosave)",
     "sample USR1",
     "sample USR2",
     "sample USR3",
     "Piano Hero P1",
     "Piano Hero P2",
     "Piano Hero P3",
     "Piano Hero P4",
     "Piano Hero P5",
     "Piano Hero P6",
     "FM Hero H1",
     "FM Hero H2",
     "FM Hero H3",
     "FM Hero H4",
     "FM Hero H5",
     "FM Hero H6",
     "user sounds U01–U16",
     "user sounds U17–U32"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): song section A; song section B; song section C; song section D; working music (autosave); sample USR1; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; 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)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you change slice positions in SLICE (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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 sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Felucca may start with beta 2ND CORE ON or OFF after FM1 Quest. Do not rely on your earlier choice: FM1 Quest can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save.",
     "Felucca reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage."
    ],
    "owner_text": "At risk by itself: settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; working music (autosave); sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; sample USR1. Felucca may start with beta 2ND CORE ON or OFF after FM1 Quest. Do not rely on your earlier choice: FM1 Quest can replace the saved settings with ones Felucca cannot read. Check MENU > SYSTEM > 2ND CORE when you return. ON (BETA) can turn itself OFF and save settings if a sound calculation fails or takes too long; OFF prevents that second-core save. Felucca reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage.",
    "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 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"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start an update or enter UPDATE MODE",
        "effect": "changed to the new format: Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       },
       {
        "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 (FM1 Quest’s own settings cannot trigger this update)",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       },
       {
        "way": "when you send the song from the web editor (without asking)",
        "effect": "changed to the new format: Saving settings replaces Quest’s game preferences and progress with SLOOP’s display options. Returning to Quest does not recover that progress from the saved copy"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a slot (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save a section from the web editor LIVE page (the computer asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it.",
     "SLOOP reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: working music (autosave); settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; sample USR1; user sounds U01–U16; user sounds U17–U32. SLOOP reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. SLOOP reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you upload samples or break loops (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "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.",
     "X0X reads sample USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. Only its first sample slot starts where X0X expects one. Sending an X0X sample longer than Quest’s sample slot to the FM-1 also writes over the start of Quest’s second sample slot."
    ],
    "owner_text": "At risk by itself: song section A; song section B; song section C; song section D; user sounds U17–U32; settings, panel mapping, song order and Quest preferences/progress. At risk when you act: sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; sample USR1. After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed. X0X reads sample USR1 until you write over the saved data. Each zone plays as a separate repeating break loop (up to 16 per sample). Key ranges, root notes, loop points and slice markers are not used. Only its first sample slot starts where X0X expects one. Sending an X0X sample longer than Quest’s sample slot to the FM-1 also writes over the start of Quest’s second sample slot.",
    "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": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "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 select a song using MIDI PROGRAM CHANGE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "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 select a song using MIDI PROGRAM CHANGE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you switch song or project (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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 music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if no readable bank of FM6 patches for your sounds survives and a compatible old FM6 bank is present",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 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": "song 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": "song 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": "song 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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "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": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you make a song with several sections using GEN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you store a section (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "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 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 also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset 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 also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "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 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 also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you rename a slot (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset 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 also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware. JIANT no longer has SAMPLE, GRAIN, SLICE or PHYS. Those sounds use its initial ANALOG sound, except old drum and percussion sounds, which become DRUM sounds. Imported names and patterns do not mean the original sample audio or sound is kept"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving any preset 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: FM Hero H3; FM Hero H4; settings, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: working music (autosave). At risk when you act: song section A; song section B; song section C; song section D; sample USR1; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; 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)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "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, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "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"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you quick-save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: working music (autosave); user sounds U01–U16; user sounds U17–U32; settings, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: song section A; song section B; song section C; song section D; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6. At risk when you act: sample USR1; sample USR2.",
    "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, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "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, panel mapping, song order and Quest preferences/progress. At risk when you act: user sounds U01–U16.",
    "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, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "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, panel mapping, song order and Quest preferences/progress. At risk when you act: user sounds U01–U16.",
    "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": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot favourites save is still stored and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot session save is still stored and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if an older ChoralRoot sound collection is still saved and the space for its next save still contains data",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if the space for its next save still needs clearing after a save or a failed start-up cleanup",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically, only if there is no saved sound collection and at least one supported older user sound can be read",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Import 0.21 sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Overwrite or Save as new and press OCT+ or SAVE (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Place all from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you choose a voice from a DX7 or CZ bank on the installer page and import it (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm deletion or reset with OCT+ (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete a sound with the computer tool (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete all user sounds or reset sounds to factory defaults from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you delete selected sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a Digitone sound from the installer page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound file or one DX7 or CZ voice from the installer page (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer question skipped (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you import a sound or a DX7 or CZ voice with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you move or swap sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the installer page and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound with the computer tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace a selected user sound from the device manager (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you replace factory sounds from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore factory order from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore factory presets from the device manager (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore favourite marks with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "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 hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "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 loop from the device manager (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you place a sound as new or back in its saved factory position from the device manager (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you place several selected sounds from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a sound from the device manager and enter its new name (the computer asks first for that slot only; writes the whole bank)",
        "effect": "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"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose Undo from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE after recording, editing or clearing this loop (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you place a loop from the device manager (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC in Advance mode when the current loop is not empty (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you swap loop slots from the device manager (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a DX7 bank (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "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 sounds U01–U16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
     "ChoralRoot reads user sounds U17–U32 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: sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; working music (autosave); sample USR1; user sounds U01–U16; user sounds U17–U32. ChoralRoot reads user sounds U01–U16 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from. ChoralRoot reads user sounds U17–U32 until you write over the saved data. Imported sounds may sound different, even if their names are kept. Confirming Flash Data erases the older banks they came from.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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 music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if no readable bank of FM6 patches for your sounds is left and a compatible older FM6 bank is still stored",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you leave SLICES after editing slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you 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 sounds U01–U16",
      "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 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 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 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 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 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 also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "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 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 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 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 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 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 also saves sounds changed to the new format when loaded. Those sounds can change when you return to your previous firmware"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample 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 upload a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "GHOULBOX reads sample USR1 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: settings, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: working music (autosave). At risk when you act: song section A; song section B; song section C; song section D; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; sample USR1. GHOULBOX reads sample USR1 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song 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": "song 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": "song 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": "song 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 music (autosave)",
      "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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "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": "FM Hero H3",
      "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": "FM Hero H4",
      "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": "FM Hero H5",
      "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": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "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, panel mapping, song order and Quest preferences/progress",
      "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: song section A; song section B; song section C; song section D; working music (autosave). At risk when you act: sample USR1; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; settings, panel mapping, song order and Quest preferences/progress. 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, panel mapping, song order and Quest preferences/progress",
      "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, panel mapping, song order and Quest preferences/progress. FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song 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": [
     "sample USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently)"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D. Carried over: sample USR1 (Hortator uses its own one-shot sound engines, so saved loops and slices play differently).",
    "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, panel mapping, song order and Quest preferences/progress",
      "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, panel mapping, song order and Quest preferences/progress.",
    "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you choose COPY SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you copy a Band groove with SAVE and a white key (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "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": "FM Hero H3",
      "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": "FM Hero H4",
      "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": "FM Hero H5",
      "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": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install a QY70 style bank from the computer (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a QY70 style bank directly with a computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete power-on hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "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: song section A; song section B; song section C; song section D; working music (autosave); sample USR1; sample USR2; settings, panel mapping, song order and Quest preferences/progress. At risk when you act: sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32. After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a readable old Felucca/Skiff project needs conversion, with room for its patterns",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE AS in the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project with the web editor’s older save command (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a valid older FM6 patch bank is still stored and no current set of FM6 patches can be loaded",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store an FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "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": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "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": "FM Hero H3",
      "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": "FM Hero H4",
      "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": "FM Hero H5",
      "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": "FM Hero H6",
      "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 sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, importing, erasing or renaming any sound writes the whole bank with Skiff’s changed sounds. Your previous firmware may play changed sounds or show sounds it cannot read as empty. New Skiff sounds use a newer saved format than firmwares that accept only version 1–3. The same saved sound format does not guarantee the same sound or pattern playback"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm a sample upload in the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing a sample slot (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "After you edit USR1 slices and leave SLICES, Skiff saves them automatically once playback stops. Without asking, that save can damage the audio in FM1 Quest’s sample USR2."
    ],
    "owner_text": "At risk by itself: sample USR2; settings, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: song section A; song section B; song section C; song section D; working music (autosave). At risk when you act: sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; sample USR1. After you edit USR1 slices and leave SLICES, Skiff saves them automatically once playback stops. Without asking, that save can damage the audio in FM1 Quest’s sample USR2.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopdx",
    "name": "sloopDX",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working 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)"
   },
   {
    "to": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample 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 sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user preset (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user preset (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Rainbow Mode reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage."
    ],
    "owner_text": "At risk by itself: settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; working music (autosave); sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; sample USR1. Rainbow Mode reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage.",
    "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, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a user wavetable directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a user wavetable from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "damaged (part written over)",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save a multi from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; 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": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; 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": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; 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": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; 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": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; 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": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a pattern (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "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, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; working music (autosave); sample USR1; sample USR2; sample USR3 (damaged (part written over)); Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32. 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, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "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, panel mapping, song order and Quest preferences/progress. At risk when you act: user sounds U01–U16.",
    "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 music (autosave)",
      "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, panel mapping, song order and Quest preferences/progress",
      "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 music (autosave). At risk when you act: settings, panel mapping, song order and Quest preferences/progress.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fart",
    "name": "Fart Machine One",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate."
    ],
    "owner_text": "At risk when you act: user sounds U01–U16. Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "chord",
    "name": "fm1-chord",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 bank patch from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase an FM6 bank patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice positions set by hand (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send 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 sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you erase a user sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       },
       {
        "way": "when you store the current sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: Saving, erasing or renaming anything in this sound bank saves all its sounds, including any changed to the new format. They can sound different when you return to your older firmware. Some sound engine numbers and controls mean different things, so a listed sound may play differently. The separate FM6 patches for those sounds are not recovered"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or clear a user sample (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "fm1-chord reads sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored."
    ],
    "owner_text": "At risk by itself: settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; working music (autosave); sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; sample USR1. fm1-chord reads sample USR1 until you write over the saved data. Saved loop choices use ordinary looping. The ends of loops held by a gate signal can sound different. Only matching saved SLICE markers are restored.",
    "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 music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "automatically, only when the working loop has unsaved changes, no song is playing, and you start an update, enter UPDATE MODE or restart with the computer tool",
        "effect": "changed to the new format: Once the working loop is saved automatically, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "automatically, only when you have restored a working loop from a backup",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "automatically, only when Quest’s red warrior is still locked and BOOT SOUND is on",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "changed to the new format: Calibration and song order load. Saving settings replaces Quest’s game progress and preferences with this beta’s playing options and count of banks already set up"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a section on the SAVE PROJECT page (asks first or waits for you to turn again)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       },
       {
        "way": "when you save the current music as a section with SAVE and a section key (asks first)",
        "effect": "changed to the new format: Once you save this section, its notes and timing use the new format. The previous firmware cannot open that saved copy"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample kit to USR3 and USR4 (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample set from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you save the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "SLOOP DX7 Banks reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
     "SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
     "SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced."
    ],
    "owner_text": "At risk by itself: working music (autosave); settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; sample USR1; user sounds U01–U16; user sounds U17–U32. SLOOP DX7 Banks reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops. SLOOP DX7 Banks reads user sounds U01–U16 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced. SLOOP DX7 Banks reads user sounds U17–U32 until you write over the saved data. Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fumi",
    "name": "FuMi-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "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, panel mapping, song order and Quest preferences/progress. At risk when you act: user sounds U01–U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jangada",
    "name": "Jangada",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 1 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 2 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 3 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm SAVE for project 4 (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save a project in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "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": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "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": "FM Hero H3",
      "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": "FM Hero H4",
      "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": "FM Hero H5",
      "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": "FM Hero H6",
      "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 sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest 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. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest 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. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest 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. FM1 Quest cannot read that group when you return. Sounds Jangada could not import are lost. Only older version 1 sounds can be imported. Newer versions look empty and are lost when this group is saved again"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "changed to the new format: Saving, renaming or erasing any sound in this group writes all sixteen sounds in Jangada’s format. FM1 Quest 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. FM1 Quest 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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase user samples or restore an empty sample slot in Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send user samples to the FM-1 from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Jangada reads sample USR1 until you write over the saved data."
    ],
    "owner_text": "At risk by itself: working music (autosave); settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; sample USR1. Jangada reads sample USR1 until you write over the saved data.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use, from its second start, after five seconds with playback stopped, no sound and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at its first start, after five seconds with playback stopped, no sound and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "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": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "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": "damaged (part written over)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       },
       {
        "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": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if this song is chosen for automatic saving after loading, saving or restoring a session, and project slot D is empty, holds a session saved automatically for the next start or holds data WaveLoop cannot read; playback must be stopped, with five seconds of silence and no music changes",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or rename this song from the panel while playback has stopped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save this song or rename it from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if the song order or selection has unsaved changes and project slot D is empty, holds WaveLoop’s automatically saved session or holds data WaveLoop cannot read",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save an FM6 or DRUM user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send an FM6 user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current FM6 or DRUM sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you edit sample slice markers (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a user sound (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you erase a user sound from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you rename a user sound (without asking; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you send a user sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       },
       {
        "way": "when you store the current sound from the editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: The next save, rename or erase in this bank saves the older sounds in the new format. They can change when you return to the previous firmware. Only sounds this firmware can read will play. Saving into a slot it cannot read can replace it without an overwrite question. Some sounds play as a different instrument: SLOOP FM6 and Floyd sounds can become PHYS, SLOOP FM6 sounds using algorithm 4 can become DRUM, SLOOPDX sounds become ANALOG, and Quest SLICE sounds can become PHYS"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "WaveLoop FM-1 reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage."
    ],
    "owner_text": "At risk by itself: song section A; song section D; settings, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: song section B; song section C; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6. At risk when you act: working music (autosave); sample USR2; user sounds U01–U16; user sounds U17–U32; sample USR1. WaveLoop FM-1 reads sample USR1 until you write over the saved data. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "orbit",
    "name": "ORBIT",
    "flags": "ACSK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "working music (autosave)",
      "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "automatically during use",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking)",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you choose SAVE > PROJECT > ERASE and repeat the action (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you choose SAVE > PROJECT > ERASE and repeat the action (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you choose SAVE > PROJECT > ERASE and repeat the action (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored during playback or before a restart is still waiting to be saved",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you choose SAVE > PROJECT > ERASE and repeat the action (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you choose SAVE > PROJECT > SAVE and repeat the action before the time runs out (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you hold SAVE and press white key 5–8 to save section A–D (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the web editor (the computer asks first)",
        "effect": "changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save, restore or clear a section with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "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": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "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": "FM Hero H3",
      "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": "FM Hero H4",
      "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": "FM Hero H5",
      "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": "FM Hero H6",
      "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 sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you erase a used USER sound from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       },
       {
        "way": "when you store a user sound from the web editor (does not ask if that slot is empty; writes the whole bank)",
        "effect": "changed to the new format: the next save, erase or rename in this sound bank saves the whole bank in the new format; newer-format sounds shown as empty are lost, and the previous firmware cannot read the bank. Only older version-1 sounds can change to this format; engine numbers and sound controls may mean different things and change how they play"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the web editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or restore a sample with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample, CHOP selection or drum kit from the web editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "ORBIT reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots."
    ],
    "owner_text": "At risk by itself: working music (autosave) (changed to the new format: the next save of this project uses ORBIT's project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); settings, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: song section A; song section B; song section C; song section D. At risk when you act: sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32; sample USR1. ORBIT reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots.",
    "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": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "changed to the new format: Saving settings removes Quest’s light options and changes its game progress and preferences. Song order and calibration still load. This saved copy does not back up Quest’s settings",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: Saving settings removes Quest’s light options and changes its game progress and preferences. Song order and calibration still load. This saved copy does not back up Quest’s settings"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking)",
        "effect": "changed to the new format: Saving settings removes Quest’s light options and changes its game progress and preferences. Song order and calibration still load. This saved copy does not back up Quest’s settings"
       },
       {
        "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 removes Quest’s light options and changes its game progress and preferences. Song order and calibration still load. This saved copy does not back up Quest’s settings"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "changed to the new format: Saving settings removes Quest’s light options and changes its game progress and preferences. Song order and calibration still load. This saved copy does not back up Quest’s settings"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking)",
        "effect": "changed to the new format: Saving settings removes Quest’s light options and changes its game progress and preferences. Song order and calibration still load. This saved copy does not back up Quest’s settings"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "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": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "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": "FM Hero H3",
      "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": "FM Hero H4",
      "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": "FM Hero H5",
      "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": "FM Hero H6",
      "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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "song section A (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine)",
     "song section B (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine)",
     "song section C (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine)",
     "song section D (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine)",
     "working music (autosave) (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine)",
     "user sounds U01–U16 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced)",
     "user sounds U17–U32 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced)"
    ],
    "kept_unseen": [],
    "notes": [
     "SLOOP Floyd FM reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops."
    ],
    "owner_text": "At risk by itself: settings, panel mapping, song order and Quest preferences/progress (changed to the new format: Saving settings removes Quest’s light options and changes its game progress and preferences. Song order and calibration still load. This saved copy does not back up Quest’s settings). At risk when you act: sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; sample USR1. Carried over: song section A (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine); song section B (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine); song section C (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine); song section D (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine); working music (autosave) (The saved song format loads. Built-in voices and effects still use the new firmware’s sound engine); user sounds U01–U16 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced); user sounds U17–U32 (Only version-1 sounds with an engine available here appear. Shared controls load based on the saved control count; missing controls use defaults. Other sounds stay hidden until their slots are replaced). SLOOP Floyd FM reads sample USR1 until you write over the saved data. Audio loads only if it fits this slot. Sending to or erasing this slot replaces it. Extra slice markers are ignored. Held loops play as ordinary loops.",
    "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 music (autosave)",
      "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "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 to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       },
       {
        "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 to the new format: the next settings save adds this firmware's extra settings; if you switch back, your previous firmware can still read the settings it supports, but some saved choices may have different meanings. Only some settings are changed to the new format. Your saved sections are not stored in these settings; the song order is. Switching back may lose settings"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot A (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section A directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section A (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot B (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section B directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section B (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot C (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section C directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section C (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a section you stored is still waiting to be saved after a restart",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you erase slot D (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you restore section D directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you save the selected project slot with the PROJECT GO knob (asks first or waits for you to turn again)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       },
       {
        "way": "when you store section D (asks first)",
        "effect": "changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR2 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you upload or erase USR2 with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR3 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR3 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold REC in IMPORTER to erase USR1 (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase USR1 with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "winampFM Synth reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots.",
     "winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things."
    ],
    "owner_text": "At risk by itself: working music (autosave) (changed to the new format: the next save of this project uses winampFM's newer project format; your previous firmware cannot load it if you switch back. Engines and sound controls can mean different things. Saved music can pass the same checks and still sound different); settings, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: song section A; song section B; song section C; song section D. At risk when you act: sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; sample USR1; user sounds U01–U16; user sounds U17–U32. winampFM Synth reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots. winampFM Synth reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. winampFM Synth reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
    "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when you select a different pattern while playback is stopped and the current pattern or one waiting to be saved needs saving",
        "effect": "lost"
       },
       {
        "way": "when you copy to another pattern (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a pattern or Save As (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save song and scenes (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "damaged (part written over)"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when 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 sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when a new recording finishes and playback is stopped",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you 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": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "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": "FM Hero H3",
      "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": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: song section A; song section B; song section C; song section D; working music (autosave); sample USR1; sample USR2; user sounds U01–U16; user sounds U17–U32. At risk by itself, under a condition: sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3. At risk when you act: FM Hero H4; FM Hero H5; FM Hero H6.",
    "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, panel mapping, song order and Quest preferences/progress",
      "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": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a project (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "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": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "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": "FM Hero H3",
      "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": "FM Hero H4",
      "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": "FM Hero H5",
      "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": "FM Hero H6",
      "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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample slot from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send samples to the FM-1 from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you upload or erase a sample with the computer tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "user sounds U01–U16 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt)",
     "user sounds U17–U32 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt)"
    ],
    "kept_unseen": [],
    "notes": [
     "Felucca [Salt] reads sample USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage."
    ],
    "owner_text": "At risk by itself: settings, panel mapping, song order and Quest preferences/progress. At risk when you act: song section A; song section B; song section C; song section D; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; sample USR1. Carried over: user sounds U01–U16 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt); user sounds U17–U32 (Only older sounds this firmware supports can play. Some may use a different instrument here. Newer sounds stay stored but hidden and cannot play in Salt). Felucca [Salt] reads sample USR1 until you write over the saved data. Slice positions you set in SLICE stay hidden. This firmware has no storage for slice positions. Playback follows this firmware’s loop rules. The other firmware’s extra loop modes may sound different. Only the first sample is stored in the same place. The other two sample slots use different storage.",
    "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, panel mapping, song order and Quest preferences/progress",
      "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": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only when you edit the sampler and its matching sample leaves room to save those edits",
        "effect": "damaged (part written over)"
       },
       {
        "way": "when you erase a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "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 send a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "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"
       },
       {
        "way": "when you upload a sample in USR2 in the older format from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "song section A",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section B",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section C",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "song section D",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save a project from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you save or paste the selected pattern (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "working music (autosave)",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR1",
      "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 a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR1 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR1 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR2 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "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 send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "damaged (part written over)"
       },
       {
        "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"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "damaged (part written over)"
       }
      ]
     },
     {
      "object": "Piano Hero P1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Piano Hero P6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FM Hero H6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase the PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you send a PIGEON bank with the bank tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample in USR3 in the older format directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a PIGEON bank with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample in USR3 in the older format from the editor (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "PIGEON reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots.",
     "PIGEON keeps stored but does not show user sounds U01–U16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them.",
     "PIGEON keeps stored but does not show user sounds U17–U32 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, panel mapping, song order and Quest preferences/progress. At risk by itself, under a condition: sample USR2. At risk when you act: song section A; song section B; song section C; song section D; working music (autosave); sample USR1; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; user sounds U01–U16; user sounds U17–U32. PIGEON reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots. PIGEON keeps stored but does not show user sounds U01–U16 until you write over the saved data. These synth sounds are kept but not shown, for backups. PIGEON does not play them. PIGEON keeps stored but does not show user sounds U17–U32 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": "sample USR2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "sample USR3",
      "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": "Piano Hero P1",
      "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": "Piano Hero P2",
      "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": "Piano Hero P3",
      "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": "Piano Hero P4",
      "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": "Piano Hero P5",
      "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": "Piano Hero P6",
      "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": "FM Hero H1",
      "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": "FM Hero H2",
      "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": "FM Hero H3",
      "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": "FM Hero H4",
      "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": "FM Hero H5",
      "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": "FM Hero H6",
      "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, panel mapping, song order and Quest preferences/progress",
      "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": "sample USR1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a sample from the device page (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a sample directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you upload a sample from the device page (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     },
     {
      "object": "user sounds U17–U32",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "some or all lost"
       },
       {
        "way": "when you rename or erase a user sound from the device page (the computer asks first for that slot only; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "partly lost (only that slot)"
       },
       {
        "way": "when you store a user sound from the device page (does not ask if that slot is empty; writes the whole bank)",
        "effect": "partly lost (the slot you save into)"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "working music (autosave) (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported)"
    ],
    "kept_unseen": [],
    "notes": [
     "FM1 Move reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots.",
     "FM1 Move reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
     "FM1 Move reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things."
    ],
    "owner_text": "At risk when you act: sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6; settings, panel mapping, song order and Quest preferences/progress; sample USR1; user sounds U01–U16; user sounds U17–U32. Carried over: working music (autosave) (Only the working project is imported. It may play differently. Saved SLOOP sections are not imported). FM1 Move reads sample USR1 until you write over the saved data. Only sample slots that start in the same place in storage can be read. Other small sample slots are not moved to matching slots. FM1 Move reads user sounds U01–U16 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things. FM1 Move reads user sounds U17–U32 until you write over the saved data. Shared older sounds may play differently because engines or sound controls mean different things.",
    "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, panel mapping, song order and Quest preferences/progress",
     "song section A",
     "song section B",
     "song section C",
     "song section D",
     "user sounds U01–U16",
     "user sounds U17–U32",
     "working music (autosave)",
     "sample USR1",
     "sample USR2",
     "sample USR3",
     "Piano Hero P1",
     "Piano Hero P2",
     "Piano Hero P3",
     "Piano Hero P4",
     "Piano Hero P5",
     "Piano Hero P6",
     "FM Hero H1",
     "FM Hero H2",
     "FM Hero H3",
     "FM Hero H4",
     "FM Hero H5",
     "FM Hero H6"
    ],
    "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, panel mapping, song order and Quest preferences/progress; song section A; song section B; song section C; song section D; user sounds U01–U16; user sounds U17–U32; working music (autosave); sample USR1; sample USR2; sample USR3; Piano Hero P1; Piano Hero P2; Piano Hero P3; Piano Hero P4; Piano Hero P5; Piano Hero P6; FM Hero H1; FM Hero H2; FM Hero H3; FM Hero H4; FM Hero H5; FM Hero H6. 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)"
   }
  ]
 },
 "not_mapped": [
  "Behaviour was read in source; no unit was tested.",
  "Optional SLICE-engine builds are excluded because the normal release configuration disables that engine; factory diagnostics and debug console internals are outside the owner control map.",
  "A source-built image was not compared with the released binary; the supplied quest-38 commit is the mapping target.",
  "Stock pattern placement is uncertain; Baud Girl storage locations are inferred from stock’s reported layout."
 ],
 "delta": {
  "parent": "SLOOP v2.7.1",
  "parent_map": "control-maps/sloop.json",
  "parent_commit": "4ec1ac829fd2bdf2c571ea215fb3d62477d01220",
  "fork_point": "SLOOP 2.3 (d691ba7)",
  "entries_carried_unchanged": 298,
  "entries_changed": 252,
  "entries_new": 916,
  "entries_dropped": 163,
  "modes_carried": 35,
  "modes_new": 68,
  "modes_dropped": 4
 },
 "delta_method": "Entry totals include controls and lights; unchanged means mode, gesture, action and short label are byte-identical to the parent, while all source objects are re-established in Quest. Every parent entry receives an audit identity in scratch; page and engine expansion is new. Modes counted by retained id, with descriptions and citations checked afresh.",
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 update hold saves reset effects",
   "fixed": "Warned that the earlier synth effects reset survives cancellation and is saved on entering update mode.",
   "at": "controls.button_oct_down[8]; controls.button_oct_up[8]; modes.update_countdown; switching_note; storage.working_project"
  },
  {
   "round": 1,
   "error": "2 menu changes selected hero",
   "fixed": "Made selection for playing and subsequent recording explicit in all four entries.",
   "at": "controls.button_oct_up[12]; controls.encoder_algorithm[5]; controls.encoder_presets[9]; controls.encoder_select[20]"
  },
  {
   "round": 1,
   "error": "3 missing Drum Rack page",
   "fixed": "Appended the GLO > DRUMS mode, screen and all four knob entries.",
   "at": "modes[-1]; controls.screen[-1]; controls.encoder_knob1[-1]; controls.encoder_knob2[-1]; controls.encoder_knob3[-1]; controls.encoder_knob4[-1]"
  },
  {
   "round": 1,
   "error": "4 preserved song order",
   "fixed": "Removed song-order loss from SLOOP and sloopDX settings warnings; explained the imported prefix is retained.",
   "at": "switching_note.foreign_write_triggers.settings_write; storage.reads_foreign"
  },
  {
   "round": 1,
   "error": "5 startup probe condition",
   "fixed": "Restricted startup cleanup wording to the two inspected headers; a Polly journal alone does not trigger cleanup.",
   "at": "switching_note.foreign_write_triggers.update_area; storage.install_and_startup_writes[1]"
  },
  {
   "round": 1,
   "error": "6 missing foreign write paths",
   "fixed": "Built all trigger-specific owner loss lists from replacing reads_foreign rows, including stock and Open project and user-sound writes, with a complete row ledger and return-trip warnings. Included targeted-slot and whole-bank replacement risks for the seventeen otherwise preserved-bank rows.",
   "at": "switching_note.foreign_write_triggers; storage.owner_warning_row_coverage"
  },
  {
   "round": 1,
   "error": "7 installer and hub links",
   "fixed": "Added the author’s installer and clarified that the hub does not list Quest.",
   "at": "install; refresh/work/fm1quest.registry.json; Markdown release line"
  },
  {
   "round": 1,
   "error": "8 user sound reset values",
   "fixed": "Distinguished fixed user-sound sends from factory-preset sends.",
   "at": "controls.button_oct_down[9]; controls.button_oct_up[9]"
  },
  {
   "round": 1,
   "error": "9 settings can save with menu open",
   "fixed": "Added immediate queueing and idle-write conditions to the three options, plus the first boss-view visit trigger.",
   "at": "controls.button_home[1]; controls.encoder_knob1 / button_sel / button_oct_up modes enemies, damage, boss_speed; modes.boss_view; switching_note; storage.settings"
  },
  {
   "round": 1,
   "error": "10 SEL light describes button action",
   "fixed": "Replaced the copied button action with the meaning of the lit LED.",
   "at": "lights.button_sel[5]"
  },
  {
   "round": 1,
   "error": "11 ambiguous labels",
   "fixed": "Separated user/project save, drum-lane/sound and recording/TRIO mode labels; unified the duplicate menu label without moving entries.",
   "at": "controls.encoder_knob4[19,20]; controls.encoder_knob1[3,6,66]; controls.button_oct_up[7,10]"
  },
  {
   "round": 1,
   "error": "12 clear screen citation overrun",
   "fixed": "Tightened the range to the real final line.",
   "at": "controls.screen[10].source"
  },
  {
   "round": 1,
   "error": "13 partly real control disagreement",
   "fixed": "Limited the disagreement to release timing and the effects reset; acknowledged the two documented changes.",
   "at": "disagreements[0]"
  },
  {
   "round": 1,
   "error": "14 HOME guide citation",
   "fixed": "Cited the actual overview naming colour, zoom and calibration.",
   "at": "disagreements[1].docs_ref"
  },
  {
   "round": 1,
   "error": "15 SEQ route to SONG",
   "fixed": "Added the third SEQ page route.",
   "at": "modes.song_screen.how_to_get_there"
  },
  {
   "round": 1,
   "error": "16 editor sound writes",
   "fixed": "Removed the nonexistent stopped-playback guard from editor STORE, PUT and ERASE; kept the panel guard.",
   "at": "storage.objects.user_presets_1/2.written_when[1]"
  },
  {
   "round": 1,
   "error": "17 stock update record",
   "fixed": "Added conditional stock-record sector cleanup, keeping the stock location reported; included the owner warning.",
   "at": "storage.install_and_startup_writes[4]; switching_note.foreign_write_triggers.installer"
  },
  {
   "round": 2,
   "error": "1 owner work only",
   "fixed": "Removed temporary update files and empty retired/reserved space from owner lists; named Open’s shared sample bank once and retained technical overlap rows.",
   "at": "switching_note.foreign_write_triggers; switching_note.foreign_work_at_risk; storage.owner_foreign_risks_by_trigger; storage.owner_foreign_risks; storage.owner_warning_row_coverage"
  },
  {
   "round": 2,
   "error": "2 stock backup erase",
   "fixed": "Restricted the conditional stock-record owner loss to stock’s own backup and explained that stock’s updater already replaced the sector’s former contents; retained reported geometry.",
   "at": "switching_note.foreign_write_triggers.installer.stock_record_losses; storage.owner_foreign_risks_by_trigger.installer; storage.install_and_startup_writes[4]"
  },
  {
   "round": 2,
   "error": "3 JIANT banks preserve other slots",
   "fixed": "Made bank 2 match bank 1’s keep-unreadable-records behaviour, moved both banks into the target-slot/whole-bank owner warning, and synchronized coverage metadata.",
   "at": "storage.reads_foreign[229]; switching_note.foreign_write_triggers.user_sound_write; switching_note.foreign_work_at_risk; storage.owner_foreign_risks; storage.owner_warning_conditional_bank_rows"
  },
  {
   "round": 2,
   "error": "4 drum MIDI output channel",
   "fixed": "Added USB MIDI output to the Drum Rack knob and mode, including channel 10 output when the dedicated input assignment is off.",
   "at": "controls.encoder_knob1[71]; modes.page_drum_rack"
  },
  {
   "round": 3,
   "error": "1 Open installer summary",
   "fixed": "Rebuilt every per-firmware summary from every trigger list; Open’s row now explicitly includes installation replacing all sixteen USER projects, device preferences, save staging and the start of its shared sample bank before first start.",
   "at": "switching_note.foreign_work_at_risk[M-VAVE FM-1 Open]; refresh/work/fm1quest.storage.json.owner_foreign_risks[M-VAVE FM-1 Open]"
  },
  {
   "round": 3,
   "error": "2 complete per-firmware summaries",
   "fixed": "Included every loss and condition from normal, conditional sound-bank and stock-record lists in each matching firmware row; Stock includes its conditional backup erase and all nine conditional-bank firmware rows use identical slot-save and whole-bank-restore wording.",
   "at": "switching_note.foreign_work_at_risk; refresh/work/fm1quest.storage.json.owner_foreign_risks"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_down[9].gesture",
   "old": "long_press",
   "new": "press_with:button_oct_up",
   "why": "firmware/src/ui_input.c:820-832@0996503bfe83c8c2217c63b29e1be75ebbcdddaf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_down[9].short_label",
   "old": "RESET FX",
   "new": "FX RESET .8s",
   "why": "firmware/src/ui_input.c:820-832@0996503bfe83c8c2217c63b29e1be75ebbcdddaf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_up[9].gesture",
   "old": "long_press",
   "new": "press_with:button_oct_down",
   "why": "firmware/src/ui_input.c:820-832@0996503bfe83c8c2217c63b29e1be75ebbcdddaf"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.button_oct_up[9].short_label",
   "old": "RESET FX",
   "new": "FX RESET .8s",
   "why": "firmware/src/ui_input.c:820-832@0996503bfe83c8c2217c63b29e1be75ebbcdddaf"
  },
  {
   "round": "index-fix-r1",
   "at": "version_note",
   "old": null,
   "new": "quest-38 is a beta according to the README at the mapped commit.",
   "why": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/README.md#L19"
  },
  {
   "round": "index-fix-r1",
   "at": "install.hub_note",
   "old": "FM1 Quest is absent from the community hub catalogue; use the author’s installer or release page.",
   "new": "FM1 Quest is listed in the community hub catalogue as version 38, added 2026-10-18.",
   "why": "https://thefirmwarehub.com/catalog.json, updated 2026-10-22 23:02 UTC; saved response: scratchpad/w34r/index-r1/web/catalog.json; fm1quest added=2026-10-18"
  },
  {
   "round": "index-fix-r1",
   "at": "control-maps/fm1quest.md:3",
   "old": "Mapped quest-38, firmware v0.21, commit 0996503, on 2026-10-17. [Release](https://github.com/hericdk/fm1-quest/releases/tag/quest-38) · [Author’s installer](https://fm1.quest/) · [Community hub](https://thefirmwarehub.com/) (Quest is not listed there).",
   "new": "Mapped quest-38 (beta), firmware v0.21, commit 0996503, on 2026-10-17. [Release](https://github.com/hericdk/fm1-quest/releases/tag/quest-38) · [Author’s installer](https://fm1.quest/) · [Community hub](https://thefirmwarehub.com/).\n\nquest-38 is a beta according to the README at the mapped commit.\n\nFM1 Quest is listed in the community hub catalogue as version 38, added 2026-10-18.",
   "why": "https://github.com/hericdk/fm1-quest/blob/0996503bfe83c8c2217c63b29e1be75ebbcdddaf/README.md#L19; https://thefirmwarehub.com/catalog.json, updated 2026-10-22 23:02 UTC; saved response: scratchpad/w34r/index-r1/web/catalog.json"
  }
 ],
 "checker_disputes_refresh": [],
 "version_note": "quest-38 is a beta according to the README at the mapped commit."
}